C#中int[][]与int[,]的比较

一、定义

首先我们定义这样两个对象

int[,] arr1 = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
int[][] arr2 = { new int[] { 1, 2, 3 }, new int[] { 4, 5, 6 }, new int[] { 7, 8, 9 } };
二、维数(秩)

然后编译上面的对象,看看值是怎样的
在这里插入图片描述 在这里插入图片描述
从上图中和定义 我们应该发现这种int[][]形式的,不应该叫做二维数字,只不过一维数组里包了一维数组,就是在套娃。

其实还有直接数据可以证明,在上述两个对象中有一个叫Rank的属性,可以获取其Array,即维数
在这里插入图片描述
看看就知道了

int rank1 = arr1.Rank;
int rank2 = arr2.Rank;

结果如下
在这里插入图片描述
很明显了,只有int[,]才是二维数组,int[][]还是一维的。

三、取值赋值

这个两者是差不多的

int num1 = arr1[1, 2];
int num2 = arr2[1][2];

arr1[1, 2] = 10;
arr2[2][2] = 10;
四、获取数组长度

对于Array我们有GetLength(int dimension)可以获取长度,其中dimension表示维数
int[,]:

int len1 = arr1.GetLength(0);     //len1 = 3
int len11 = arr1.GetLength(1);    //len11 = 3 

但是因为int[][]是一维的,所以我们使用上面的方式

int len2 = arr2.GetLength(0);     //len2 = 3
int len22 = arr2.GetLength(1);    //越界 

会抛出IndexOutOfRangeException:“索引超出了数组界限的异常,这很容易想到。
既然是一维的,我们直接获取其Length属性就可以了

//第一层数组长度
int len2 = arr2.Length;     //len2 = 3
//因为第一层中对象也是数组,所以取第二层数字长度获取具体的Length
int len22 = arr2[0].Length;    //len22 = 3
五、遍历

有了维数,遍历就轻松了

///int[,]
for (int i = 0; i < arr1.GetLength(0); i++)
{
    for (int j = 0; j < arr1.GetLength(1); j++)
    {
        //To Do
    }
}

///int[][]
for (int i = 0; i < arr1.Length; i++)
{
    for (int j = 0; j < arr1[0].Length; j++)
    {
        //To Do
    }
}
六、初始化数据

假设初始化数据
[ [1,1,..*n...,1,1], [2,2,..*n...,2,2], [3,3,..*n...,3,3],...*m.... ,[m-1,m-1,..*n...,m-1,m-1], [m,m,..*n...,m,m] ]
int[,]

public int[,] InitArray(int m = 0, int n = 0)
{
	int[, ] arr = new int[m, n];
	for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            arr[i, j] = i + 1;
        }
    }
    return arr;
}

int[][]

public int[,] InitArray(int m = 0, int n = 0)
{
	int[][] arr = new int[m][];
	for (int i = 0; i < m; i++)
    {
        int[] curArr = new int[n];
        for (int j = 0; j < n; j++)
        {
            arr[j] = i + 1;
        }
        arr[i] = curArr;
    }
    return arr;
}
  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值