C#中int[][]与int[,]的使用与区别
作者:丨背水丨
本文主要介绍了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; }
到此这篇关于C#中int[][]与int[,]的使用与区别的文章就介绍到这了,更多相关C# int[][]与int[,]内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!