精华内容
下载资源
问答
  • 二维数组累加

    2019-11-05 14:55:04
    二维数组根据相同 ‘键’ 累加 <?php $a = array ( ); $b = array ( array ( 'productid' => '100', 'sex' => 'boy', 'price' => 510), array ( 'productid' => '103', 'sex' => 'renyao', ...

    二维数组根据相同 ‘键’ 累加

    <?php
    $a = array (
    
    );
    $b = array (
      array ( 'productid' => '100', 'sex' => 'boy', 'price' => 510),
    
      array ( 'productid' => '103', 'sex' => 'renyao', 'price' => 600),
      array ( 'productid' => '103', 'sex' => 'renyao', 'price' => 50),
    	
    );
     
    function foo() {
      foreach(func_get_args() as $ar) {
        foreach($ar as $v) {
          $k = $v['productid'];
          if(! $r[$k] ) {
            $r[$k] = $v;
          }else{
    	  $r[$k]['price'] += $v['price'];
    	  }
        }
      }
      return $r;
    }      
    
    print_r(foo($a, $b));
    ?>
    

     

    输出结果:

    Array
    (
        [100] => Array
            (
                [productid] => 100
                [sex] => boy
                [price] => 510
            )
    
        [103] => Array
            (
                [productid] => 103
                [sex] => renyao
                [price] => 650
            )
    
    )

     

    展开全文
  • 上节讲解的数组可以看作是一行连续的...本节只介绍二维数组,多维数组可由二维数组类推而得到。二维数组的定义二维数组定义的一般形式是:dataType arrayName[length1][length2];其中,dataType 为数据类型,arrayNa...

    上节讲解的数组可以看作是一行连续的数据,只有一个下标,称为一维数组。在实际问题中有很多数据是二维的或多维的,因此C语言允许构造多维数组。多维数组元素有多个下标,以确定它在数组中的位置。本节只介绍二维数组,多维数组可由二维数组类推而得到。

    二维数组的定义

    二维数组定义的一般形式是:

    dataType arrayName[length1][length2];

    其中,dataType 为数据类型,arrayName 为数组名,length1 为第一维下标的长度,length2 为第二维下标的长度。

    我们可以将二维数组看做一个 Excel 表格,有行有列,length1 表示行数,length2 表示列数,要在二维数组中定位某个元素,必须同时指明行和列。例如:

    int a[3][4];

    定义了一个 3 行 4 列的二维数组,共有 3×4=12 个元素,数组名为 a,即:

    a[0][0], a[0][1], a[0][2], a[0][3]

    a[1][0], a[1][1], a[1][2], a[1][3]

    a[2][0], a[2][1], a[2][2], a[2][3]

    如果想表示第 2 行第 1 列的元素,应该写作 a[2][1]。

    也可以将二维数组看成一个坐标系,有 x 轴和 y 轴,要想在一个平面中确定一个点,必须同时知道 x 轴和 y 轴。

    二维数组在概念上是二维的,但在内存中是连续存放的;换句话说,二维数组的各个元素是相互挨着的,彼此之间没有缝隙。那么,如何在线性内存中存放二维数组呢?有两种方式:

    一种是按行排列, 即放完一行之后再放入第二行;

    另一种是按列排列, 即放完一列之后再放入第二列。

    在C语言中,二维数组是按行排列的。也就是先存放 a[0] 行,再存放 a[1] 行,最后存放 a[2] 行;每行中的 4 个元素也是依次存放。数组 a 为 int 类型,每个元素占用 4 个字节,整个数组共占用 4×(3×4)=48 个字节。

    你可以这样认为,二维数组是由多个长度相同的一维数组构成的。

    【实例1】一个学习小组有 5 个人,每个人有 3 门课程的考试成绩,求该小组各科的平均分和总平均分。

    --

    Math

    C

    English

    张涛

    80

    75

    92

    王正华

    61

    65

    71

    李丽丽

    59

    63

    70

    赵圈圈

    85

    87

    90

    周梦真

    76

    77

    85

    对于该题目,可以定义一个二维数组 a[5][3] 存放 5 个人 3 门课的成绩,定义一个一维数组 v[3] 存放各科平均分,再定义一个变量 average 存放总平均分。最终编程如下:

    #include

    int main(){

    int i, j; //二维数组下标

    int sum = 0; //当前科目的总成绩

    int average; //总平均分

    int v[3]; //各科平均分

    int a[5][3]; //用来保存每个同学各科成绩的二维数组

    printf("Input score:\n");

    for(i=0; i<3; i++){

    for(j=0; j<5; j++){

    scanf("%d", &a[j][i]); //输入每个同学的各科成绩

    sum += a[j][i]; //计算当前科目的总成绩

    }

    v[i]=sum/5; // 当前科目的平均分

    sum=0;

    }

    average = (v[0] + v[1] + v[2]) / 3;

    printf("Math: %d\nC Languag: %d\nEnglish: %d\n", v[0], v[1], v[2]);

    printf("Total: %d\n", average);

    return 0;

    }

    运行结果:

    Input score:

    80 61 59 85 76 75 65 63 87 77 92 71 70 90 85↙

    Math: 72

    C Languag: 73

    English: 81

    Total: 75

    程序使用了一个嵌套循环来读取所有学生所有科目的成绩。在内层循环中依次读入某一门课程的各个学生的成绩,并把这些成绩累加起来,退出内层循环(进入外层循环)后再把该累加成绩除以 5 送入 v[i] 中,这就是该门课程的平均分。外层循环共循环三次,分别求出三门课各自的平均成绩并存放在数组 v 中。所有循环结束后,把 v[0]、v[1]、v[2] 相加除以 3 就可以得到总平均分。

    二维数组的初始化

    二维数组的初始化可以按行分段赋值,也可按行连续赋值。

    例如,对于数组 a[5][3],按行分段赋值应该写作:

    int a[5][3]={ {80,75,92}, {61,65,71}, {59,63,70}, {85,87,90}, {76,77,85} };

    按行连续赋值应该写作:

    int a[5][3]={80, 75, 92, 61, 65, 71, 59, 63, 70, 85, 87, 90, 76, 77, 85};

    这两种赋初值的结果是完全相同的。

    【实例2】和“实例1”类似,依然求各科的平均分和总平均分,不过本例要求在初始化数组的时候直接给出成绩。

    #include

    int main(){

    int i, j; //二维数组下标

    int sum = 0; //当前科目的总成绩

    int average; //总平均分

    int v[3]; //各科平均分

    int a[5][3] = {{80,75,92}, {61,65,71}, {59,63,70}, {85,87,90}, {76,77,85}};

    for(i=0; i<3; i++){

    for(j=0; j<5; j++){

    sum += a[j][i]; //计算当前科目的总成绩

    }

    v[i] = sum / 5; // 当前科目的平均分

    sum = 0;

    }

    average = (v[0] + v[1] + v[2]) / 3;

    printf("Math: %d\nC Languag: %d\nEnglish: %d\n", v[0], v[1], v[2]);

    printf("Total: %d\n", average);

    return 0;

    }

    运行结果:

    Math: 72

    C Languag: 73

    English: 81

    Total: 75

    对于二维数组的初始化还要注意以下几点:

    1) 可以只对部分元素赋值,未赋值的元素自动取“零”值。例如:

    int a[3][3] = {{1}, {2}, {3}};

    是对每一行的第一列元素赋值,未赋值的元素的值为 0。赋值后各元素的值为:

    1  0  0

    2  0  0

    3  0  0

    再如:

    int a[3][3] = {{0,1}, {0,0,2}, {3}};

    赋值后各元素的值为:

    0  1  0

    0  0  2

    3  0  0

    2) 如果对全部元素赋值,那么第一维的长度可以不给出。例如:

    int a[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};

    可以写为:

    int a[][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};

    3) 二维数组可以看作是由一维数组嵌套而成的;如果一个数组的每个元素又是一个数组,那么它就是二维数组。当然,前提是各个元素的类型必须相同。根据这样的分析,一个二维数组也可以分解为多个一维数组,C语言允许这种分解。

    例如,二维数组a[3][4]可分解为三个一维数组,它们的数组名分别为 a[0]、a[1]、a[2]。

    这三个一维数组可以直接拿来使用。这三个一维数组都有 4 个元素,比如,一维数组 a[0] 的元素为 a[0][0]、a[0][1]、a[0][2]、a[0][3]。

    展开全文
  • 二维数组格式1 /* 二维数组:就是元素为一维数组的一个数组。 格式1: 数据类型[][] 数组名 = new 数据类型[m][n]; m:表示这个二维数组有多少个一维数组。 n:表示每一个一维数组的元素有多少个。 注意...

    二维数组格式1

    /*
        二维数组:就是元素为一维数组的一个数组。
        
        格式1:
            数据类型[][] 数组名 = new 数据类型[m][n];
            
            m:表示这个二维数组有多少个一维数组。
            n:表示每一个一维数组的元素有多少个。
            
        注意:
            A:以下格式也可以表示二维数组
                a:数据类型 数组名[][] = new 数据类型[m][n];
                b:数据类型[] 数组名[] = new 数据类型[m][n];
            B:注意下面定义的区别
                int x;
                int y;
                int x,y;
                
                int[] x;
                int[] y[];
                
                int[] x,y[];//这个x是一维数组,y是二维数组
    */
    class Array2Demo {
        public static void main(String[] args) {
             //定义一个二维数组
             int[][] arr = new int[3][2];
             //定义了一个二维数组arr
             //这个二维数组有3个一维数组的元素
             //每一个一维数组有2个元素
             //输出二维数组名称
             System.out.println(arr); //地址值    [[I@175078b
             //输出二维数组的第一个元素一维数组的名称
             System.out.println(arr[0]); //地址值    [I@42552c
             System.out.println(arr[1]); //地址值    [I@e5bbd6
             System.out.println(arr[2]); //地址值    [I@8ee016
             //输出二维数组的元素
             System.out.println(arr[0][0]); //0
             System.out.println(arr[0][1]); //0
        }
    }

    格式1内存图解:

     

     二维数组格式2

    /*
        格式2:
            数据类型[][] 数组名 = new 数据类型[m][];
            
            m:表示这个二维数组有多少个一维数组。
            列数没有给出,可以动态的给。这一次是一个变化的列数。
    */
    class Array2Demo2 {
        public static void main(String[] args) {
            //定义数组
            int[][] arr = new int[3][];
            
            System.out.println(arr);    //[[I@175078b
            System.out.println(arr[0]); //null
            System.out.println(arr[1]); //null
            System.out.println(arr[2]); //null
            
            //动态的为每一个一维数组分配空间
            arr[0] = new int[2];
            arr[1] = new int[3];
            arr[2] = new int[1];
            
            System.out.println(arr[0]); //[I@42552c
            System.out.println(arr[1]); //[I@e5bbd6
            System.out.println(arr[2]); //[I@8ee016
            
            System.out.println(arr[0][0]); //0
            System.out.println(arr[0][1]); //0
            //ArrayIndexOutOfBoundsException
            //System.out.println(arr[0][2]); //错误
            
            arr[1][0] = 100;
            arr[1][2] = 200;
        }
    }

     二维数组格式2  内存图解:

    二维数组格式3 

    /*
        格式3:
            基本格式:
                数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2...},{元素1,元素2...},{元素1,元素2...}};
            简化版格式:
                数据类型[][] 数组名 = {{元素1,元素2...},{元素1,元素2...},{元素1,元素2...}};
                
            举例:
                int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
                int[][] arr = {{1,2,3},{4,5},{6}};
    */
    class Array2Demo3 {
        public static void main(String[] args) {
            //定义数组
            int[][] arr = {{1,2,3},{4,5},{6}};
            
            System.out.println(arr);
            System.out.println(arr[0]);
            System.out.println(arr[1]);
            System.out.println(arr[2]);
            
            System.out.println(arr[0][0]); //1
            System.out.println(arr[1][0]); //4
            System.out.println(arr[2][0]); //6
            
            System.out.println(arr[0][1]); //2
            System.out.println(arr[1][1]); //5
            //越界
            System.out.println(arr[2][1]); //错误
        }
    }

    二维数组格式3  内存图解:

     遍历二维数组

    /*
        需求:二维数组遍历
        
        外循环控制的是二维数组的长度,其实就是一维数组的个数。
        内循环控制的是一维数组的长度。
    */
    class Array2Test {
        public static void main(String[] args) {
            //定义一个二维数组
            int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
            
            //用方法改进
            //调用方法
            printArray2(arr);
        }    
        
        /*
            需求:遍历二维数组
            两个明确:
                返回值类型:void
                参数列表:int[][] arr
        */
        public static void printArray2(int[][] arr) {
            for(int x=0; x<arr.length; x++) {
                for(int y=0; y<arr[x].length; y++) {
                    System.out.print(arr[x][y]+" ");
                }
                System.out.println();
            }
        }
    }

    二维数组求和:

    /*
        公司年销售额求和
        某公司按照季度和月份统计的数据如下:单位(万元)
        第一季度:22,66,44
        第二季度:77,33,88
        第三季度:25,45,65
        第四季度:11,66,99
        
        分析:
            A:把题目的数据用二维数组来表示
                int[][] arr = {{22,66,44},{77,33,88},{25,45,65},{11,66,99}};
            B:如何求和呢?
                求和其实就是获取到每一个元素,然后累加即可。
            C:定义一个求和变量sum,初始化值是0。
            D:通过遍历就可以得到每一个二维数组的元素。
            E:把元素累加即可。
            F:最后输出sum,就是结果。
    */
    class Array2Test2 {
        public static void main(String[] args) {
            //把题目的数据用二维数组来表示
            int[][] arr = {{22,66,44},{77,33,88},{25,45,65},{11,66,99}};
            
            //定义一个求和变量sum,初始化值是0。
            int sum = 0;
            
            //通过遍历就可以得到每一个二维数组的元素。
            for(int x=0; x<arr.length; x++) {
                for(int y=0; y<arr[x].length; y++) {
                    //把元素累加即可。
                    sum += arr[x][y];
                }
            }
            
            //最后输出sum,就是结果。
            System.out.println("一年的销售额为:"+sum+"万元");
        }
    }

     

    二维数组树出杨辉三角:打印杨辉三角形(行数可以键盘录入)

    /*
    
        需求:打印杨辉三角形(行数可以键盘录入)
        
        1
        1 1    
        1 2 1
        1 3 3 1
        1 4 6 4 1 
        1 5 10 10 5 1
    
        分析:看这种图像的规律
            A:任何一行的第一列和最后一列都是1
            B:从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和。
        
        步骤:
            A:首先定义一个二维数组。行数如果是n,我们把列数也先定义为n。
              这个n的数据来自于键盘录入。
            B:给这个二维数组任何一行的第一列和最后一列赋值为1
            C:按照规律给其他元素赋值
                从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和。
            D:遍历这个二维数组。
    */
    import java.util.Scanner;
    
    class Array2Test3 {
        public static void main(String[] args) {
            //创建键盘录入对象
            Scanner sc = new Scanner(System.in);
            
            //这个n的数据来自于键盘录入。
            System.out.println("请输入一个数据:");
            int n = sc.nextInt();
            
            //定义二维数组
            int[][] arr = new int[n][n];
            
            //给这个二维数组任何一行的第一列和最后一列赋值为1
            for(int x=0; x<arr.length; x++) {
                arr[x][0] = 1; //任何一行第1列
                arr[x][x] = 1; //任何一行的最后1列
            }
            
            //按照规律给其他元素赋值
            //从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和。
            for(int x=2; x<arr.length; x++) {
                //这里如果y<=x是有个小问题的,就是最后一列的问题
                //所以这里要减去1
                //并且y也应该从1开始,因为第一列也是有值了
                for(int y=1; y<=x-1; y++) {
                    //每一个数据是它上一行的前一列和它上一行的本列之和。
                    arr[x][y] = arr[x-1][y-1] + arr[x-1][y];
                }
            }
            
            //这个时候,要注意了,内循环的变化必须和曾经讲过的九九乘法表类似
            for(int x=0; x<arr.length; x++) {
                for(int y=0; y<=x; y++) {
                    System.out.print(arr[x][y]+"\t");
                }
                System.out.println();
            }
        }
    }

     

    展开全文
  • 一维数组放到二维数组 var list = [1,2,3,4,5,6,7,8,9,10]; function pages (list) { const pages = [] list.forEach((item, index) => { const page = Math.floor(index / 8) if (!pages[page]) { pages...

    一维数组放到二维数组

    var list = [1,2,3,4,5,6,7,8,9,10];
    function pages (list) {
        const  pages = []
        list.forEach((item, index) => {
            const page = Math.floor(index / 8)
            if (!pages[page]) {
              pages[page] = []
            }
            pages[page].push(item)
        });
      return pages
    }
    var arr = pages(list);
    console.log(arr);

    二维数组放到一维数组

    方法一:使用ES5的reduce

    reduce() 方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始缩减,最终为一个值。

     var arr=[[0,1],[2,3],[4,5]];
        var onearr=arr.reduce(function(a,b){
            return a.concat(b);
        })
        console.log(onearr);//[0,1,2,3,4,5]
    

     方法二:使用apply()

    语法:apply([thisObj[,argArray]])
    定义:应用某一对象的一个方法,用另一个对象替换当前对象

    var arr=[[1,2],[3,4],[5,6]];
     var onearr=[].concat.apply([],arr);
     console.log(onearr);//[0,1,2,3,4,5]

     方法三:使用Array.prototype.flat()

    flat() 方法会递归到指定深度将所有子数组连接,并返回一个新数组 语法:var newArray = arr.flat(depth),参数说明:depth,可选,指定嵌套数组中的结构深度,默认值为1。flat()方法会移除数组中的空项。但undefined、null仍会保留。

     var arr=[[1,2],[3,4],[5,6]];
     var onearr=arr.flat();
     console.log(onearr);//[0,1,2,3,4,5]

     方法四:

    通过将数组转变成字符串,利用str.split(',')函数把字符串分割到数组中实现,但是这样数字全都变成字符串了

    var arr1 = [[0, 1], [2, 3], [4, 5]];

    第一种:var arr = (arr1 + '').split(',');
    利用+运算法在和字符串计算时会先转化为字符串,任何相加将其转为字符串
    第二种:var arr = arr.toString().split(',');
    第三种:var arr = arr.join().split(',');

    展开全文
  • 二维数组 就是一个由行和列组成的一个表格而已,矩阵Matrix。 我们在这个矩阵中访问元素的话,是根据元素的行角标和列角标所确定的。 1、那么对于二维数组是如何存储的呢? 无论是二维数组,还是多维数组,...
  • C++培训之语言二维数组的定义和引用更新时间:2016年09月12日14时39分 来源:传智播客C++培训学院 浏览次数:C语言二维数组的定义和引用7.1.1二维数组的定义前面介绍的数组只有一个下标,称为一维数组,其数组元素也...
  • 学习完了数组元素的访问,学习下数组的遍历及数组的元素累加和操作。 class ArrayDemo09 { public static void main... //一维数组的求累加和并遍历 int[] arr = {10,20,30,40,50}; int sum = 0; for (i...
  • $arr = array(array('user_id' => 100,'goods_id' => 10,'number' => 1,),array('user_id' => 102,'goods_id' => 10,'number' => 1,),array('user_id' => 102,'goods_id' =>...
  • 二维数组

    2019-07-16 20:15:40
    二维数组 1. 二维数组定义:二维数组的每一个元素又是一个一维数组 {1, 2, 3} --> 一维数组 {{1, 2, 3}, {3, 4, 5}, {6, 7, 8}} --> 二维数组 2.二维数组的创建 方式一:创建等长的二维数组二维数组中的...
  • #import int main(int argc, const char * argv[]){@autoreleasepool {#pragma mark-----------二维数组int a[3][4]={{1,2,3,4},{5,6,7,8},{12,10,11,12}};//打印二维数组for (int i = 0; i<3; i++)for (int j =0...
  • 二维数组3.1概念3.2 二维数组的声明和创建3.3二维数组的遍历4.练习4.1从键盘中任意输入一个数据,判断数组中是否包含此数4.2统计4*5二维数组中奇数的个数和偶数的个数。4.3将数组的元素全部输出4.4输出最大值4.5冒泡...
  • * 定义一个长度为[16][16]的整型二维数组并输入或指定所有位置...* 分别实现二维数组中所有行和所有列中所有元素的累加和并打印。 * 再分别实现二维数组中左上角到右下角和右上角到左下角所有元素的累加和并打印。 ...
  • 文章目录二维数组二维数组的存储二维数组应用的三个基础框架二维数组案例:计算多个学生的成绩并排序输出 二维数组 二维数组可以表示二维表格上的数据 二维数组存储形式先行后列 二维数组的处理一般采用双重循环...
  • 该题为腾讯mxg面试委员会二面试题,要求如下: 逐行打印n * n回型矩阵( 不可以在内存填好整个矩阵然后再打印) n=3 1 2 3 8 9 4 7 6 5 n=4 1 2 3 4 12 13 14 5 ...不在内存中开辟二维数组...将二维数组看成一层一层...
  • 二维数组转为一维数组: i.reduce() 方法 接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。对空数组是不会执行回调函数的 语法:array.reduce(function(total,currentValuue,...
  • 一维数组练习二、二维数组1. 二维数组概述及格式2. 二维数组内存图解3. 二维数组练习三、递归1. 递归概述2. 递归思想图解3.递归练习 一、一维数组 1. 一维数组概念及定义格式 为什么要有数组 数组可以存储同...
  • C语言二维数组知识点介绍数组可以看作是一行连续的数据,只有一个下标,称为一维数组。在实际问题中有很多量是二维的或多维的,因此C语言允许构造多维数组。多维数组元素有多个下标,以确定它在数组中的位置。本节只介绍...
  • for循环对二维数组进行累加和 public class Test { private static int Add(int arr_2[][]) { int sum = 0; for(int x=0; x<arr_2.length; x++)//arr_2.length->获取二维数组行的行数 { for(int y...
  • 一维数组,二维数组,格式,定义,简单查询的介绍
  • 通过一道题我们来学习对二维数组里的值求和的方法。 题目:一个14*14方阵A(i,j),其每个元素的值为该元素下标的立方和,求出该矩阵所有元素的累加和(注:i,j从1到14).308700一个14*14方阵A(i,j),其每个元素的值为该...
  • 1、二维数组的元素遍历及数组的元素累加和 1 class ArrayDemo09 { 2 public static void main(String[] args){ 3 //一维数组的求累加和并遍历 4 int[] arr = {10,20,30,40,50}; 5 int sum = 0; 6 ...
  • Java 二维数组

    2020-02-20 19:55:25
    二维数组 二维数组简单来说就是一个由行和列组成的一个表格,也就是数学中的矩阵。我们在这个矩阵中访问元素的话,是根据元素的行角标和列角标所确定的。 那么具体是在内存中如何存储的呢? 无论是二维数组,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,596
精华内容 7,838
关键字:

二维数组累加