数组的这些知识你知道吗?

/*
*作者:呆萌老师
*☑csdn认证讲师
*☑51cto高级讲师
*☑腾讯课堂认证讲师
*☑网易云课堂认证讲师
*☑华为开发者学堂认证讲师
*☑爱奇艺千人名师计划成员
*在这里给大家分享技术、知识和生活
*各种干货,记得关注哦!
*vx:it_daimeng
*/

1、什么是数组

        数组是线性表的扩展,可以理解为长度有限的线性表。在数组中可以存储相同类型的元素。其标志为[]。

2、数组特性

        1、元素类型的统一性。

                在数组中只能存储相同类型的元素。

        2、元素个数的有穷性。

                数组的个数是有限的。

        3、元素随机访问性

                数组可通过元素的索引随机访问元素。

        4、空间的连续性

                在数组中元素是存储在一片连续的空间中。

3、数组的类型

        数组根据存储类型及维度可分为,一维数组和多维数组。

        一维数组存储值与对象,多维数组,存储数组的数组。

4、数组的操作

                1、定义数组

                2、赋值

                3、数组遍历

                4、添加元素

                5、修改元素

Object[] objects={};//这里使用的是匿名数组,在开发中以后将常用匿名数组,这样就不必写死一个数组的长度
Scanner scanner=new Scanner(System.in);
for (int i=0;i<3;i++){
    objects[i]=scanner.next();//在这里利用计数器来控制数组的长度。
}
for (Object OB:objects){
    System.out.println(OB);//利用高级for循环来输出数组的元素,这样就不必去考虑数组的下标。
} 

案例

import java.util.Arrays;
import java.util.OptionalDouble;
 
public class Anli {
    public static void main(String[] args) {
        /*
        * 定义数组,对数组初始化
        * */
        String[][] studentinfo={{"101","a"},{"102","B"},{"103","C"},{"104","D"}};
        String[] name={"java","c++","c#","JS"};
        double[][] score={{98,84,82,81},{55,66,88,44},{33,44,99,72},{54,86,94,92}};
        /*
        对数组信息的输出或者在以后的操作中这里将对数组的内容进行录入
        */
        System.out.print("学号"+"\t");
        for (int i=0;i<4;i++){
            System.out.print(studentinfo[i][0]+"\t");
        }
        System.out.println();
        System.out.print("课程科目"+"\t");
        for (int i=0;i<4;i++){
            System.out.print(studentinfo[i][1]+"\t");
        }
        System.out.println();
        for (int i=0;i<4;i++){
            System.out.print(name[i]+"\t");
            for(int j=0;j<4;j++){
                System.out.print(score[i][j]+"\t");
            }
            System.out.println();
        }
        /*
        * 定义最大值,最小值,求和,以及平均数这四个数组*/
        double max[]=new double[4];
        double min[]=new double[4];
        double sum[]=new double[4];
        double avg[]=new double[4];
        /*
        在此处将实现求取出每一组课程中的平均数,最大值,最小值。
        调用math函数对数组进行操作,
        调用max()方法求取最大值,min()求取最小值,sum()方法自动求和,sum[i]/4将总和除以4,求取平均数。
        并将求取出的值依次赋值给定义的四个数组max[],min[],sum[],avg[].
        */
        for (int i=0;i<4;i++){
            max[i]= Arrays.stream(score[i]).max().getAsDouble();
            min[i]=Arrays.stream(score[i]).min().getAsDouble();
            sum[i]=Arrays.stream(score[i]).sum();
            avg[i]=sum[i]/4;
        }
        System.out.println();
        /*
        对求出的最大值,最小值,平均数进行结果输出
        */
        for (int i=0;i<4;i++){
            System.out.print(name[i]+"\t"+"最高分:"+max[i]+"\t"+"最低分:"+min[i]+"\t"+"平均分:"+avg[i]+"\t");
            System.out.println();
        }
    }
} 

5、排序------冒泡

 int[] num={5,2,5,9,5,4,6,6};
        for (int i=1;i<num.length;i++){ //外层循环执行数组长度,依次次找到这组数中第几大。
            for (int j=0;j<num.length-i;j++){//内层循环执行比较,-i主要是因为之前找到的值,都不在参与本次运算。
                if (num[j]>num[j+1]){
                    int t=num[j];
                    num[j]=num[j+1];
                    num[j+1]=t;
                }
            }
        }
        for (int b:num){
            System.out.println(b);
        } 

<think>好的,我现在需要解决用户的问题:如何使用JavaScript中的map方法处理多维数组并将其展平为一维数组。首先,我得回忆一下map和数组展平的相关知识。 用户提到了map方法,但map本身是用于对数组的每个元素执行函数并返回新数组,不会改变数组结构。也就是说,如果直接对多维数组使用map,比如[[1,2],[3,4]].map(x => x),得到的还是同样的结构,无法展平。那怎么结合map来实现展平呢? 我记得有flat和flatMap方法。flat方法可以将多维数组展平,例如array.flat(Infinity)就能完全展平。flatMap则是map和flat的结合,先对每个元素执行函数,然后将结果展平一层。不过用户特别提到要用map,可能需要自己递归处理。 比如,可以写一个递归函数,检查元素是否是数组,如果是,就继续递归处理,否则返回元素。这样,在map的每个元素上应用这个递归函数,然后合并结果。不过单纯的map可能不够,需要配合其他方法,比如concat或者reduce。 比如参考用户提供的例子中,使用reduce和concat递归展平。而用户的问题是如何用map来实现。可能需要将每个子数组用map展开,然后合并。例如,对于多维数组,递归地对每个元素使用map,并将结果连接起来。 不过单独使用map的话,每个元素处理后的结果可能还是数组,所以需要将这些数组连接起来。比如,可以这样: function flatten(arr) { return arr.map(element => { if (Array.isArray(element)) { return flatten(element); } else { return [element]; } }).reduce((acc, val) => acc.concat(val), []); } 这里,map将每个元素转换成数组(如果是数组则递归展平),然后用reduce将所有的数组合并成一个一维数组。不过这样其实用了map和reduce的组合,而不仅仅是map。 或者,有没有办法仅用map来实现?可能比较困难,因为map返回的是嵌套数组的结构,需要额外的步骤来展平。因此,可能需要结合flatMap。例如: function flatten(arr) { return arr.flatMap(element => Array.isArray(element) ? flatten(element) : element ); } 这里,flatMap会先对每个元素进行处理,如果是数组则递归展平,否则保留元素,并且自动将结果展平一层。递归下去就能全部展平。但这是用了flatMap,而用户的问题是关于map的。所以可能需要解释虽然map单独用不够,但可以结合其他方法,或者使用flatMap更高效。 总结来说,单独使用map无法直接展平多维数组,需要配合递归和数组连接的方法。或者更简单地,使用flat(Infinity)或者递归的reduce方法。但用户可能想知道如何用map来实现,可能需要给出一个结合map和递归的方案,并说明map的局限性,同时提供其他更有效的方法,如flat或flatMap。 此外,用户提供的引用中提到了使用flat(Infinity)和递归的reduce方法,这些都是可行的方案。需要比较这些方法,并指出map在此场景下的适用性。</think>### 使用 `map` 处理多维数组并展平的方法 #### 1. `map` 方法的局限性 `map` 方法本身用于对数组的每个元素执行操作并返回新数组,但**不会自动展平嵌套结构**。例如: ```javascript const arr = [[1, [2]], [3]]; const mapped = arr.map(x => x); // 结果仍是 [[1, [2]], [3]] ``` #### 2. 结合递归和 `map` 实现展平 若强制要求使用 `map`,需通过递归处理嵌套数组,并手动合并结果: ```javascript function flattenWithMap(arr) { return [].concat(...arr.map(element => Array.isArray(element) ? flattenWithMap(element) : [element] )); } // 示例 const nestedArray = [1, [2, [3, 4]], 5]; console.log(flattenWithMap(nestedArray)); // [1, 2, 3, 4, 5] ``` - **步骤解析**: 1. 对每个元素使用 `map`,若元素数组则递归展平,否则包装为单元素数组。 2. 通过 `concat` 合并所有子数组。 #### 3. 更优方案:`flat` 或 `flatMap` 虽然上述方法可行,但实际开发中更推荐以下方法: - **使用 `flat(Infinity)`**:直接展平任意层嵌套[^2]。 ```javascript const flatArray = nestedArray.flat(Infinity); ``` - **使用 `flatMap`**:适合一层展平场景。 ```javascript const semiFlat = nestedArray.flatMap(x => x); // 仅展平一层 ``` #### 4. 多维数组处理场景对比 | 方法 | 代码复杂度 | 性能 | 适用场景 | |-------------------|------------|------|------------------------| | 递归 + `map` | 高 | 较低 | 需强制使用 `map` 的场景 | | `flat(Infinity)` | 低 | 高 | 快速展平任意层嵌套 | | `reduce` + 递归 | 中 | 中 | 兼容性要求高时[^3] | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值