就是一个数组中的某个元素,当用数组下标表示的时候,需要用几个数字来表示才能唯一确定这个元素,这个数组就是几维。 例如,一个数字确定一个元素:a[7]就是一维的 两个数字确定一个元素:b[5][9]是二维 三个数字:c[6][8][1]是三维 ………… n个数字就是n维 可以把数组的维看成是“数组套数组的层数” 例如,数组{ 1, 5, 9, 0 }是一维数组,要找到数字9只需找第三个数字。 { {1,2}, {5,5}, {2,4}, {9,0} }是二维数组。它套了两层数组。 要找到数字9,需要指出9是在外层数组中的哪个元素,还有是内层数组中的哪个元素。所以需要用两个数字标出:数组第4个元素中的第1个元素就是9。
GetUpperBound可以获取数组的最高下标。 GetLowerBound可以获取数组的最低下标。 这样就可以实现对数组的遍历 //定义二维数组 string[,] myStrArr2=new string[,]{{"油","盐"},{"围城","晨露"},{"毛毛熊","Snoopy"}}; for(int i=myStrArr2.GetLowerBound(0);i<=myStrArr2.GetUpperBound(0);i++) { for(int i=myStrArr2.GetLowerBound(1);i<=myStrArr2.GetUpperBound(1);i++) { //处理每一个元素 } } 0表示二维数组的第一维,1表示数组的第二维
使用foreach去遍历数据组和容器是更为可取的方式,这样,只要容器支持IEnumerable接口,可以随后改变容器的类型,而foreach块不必做改动,如果使用for循环来遍历,可能必须修改访问每个独立的元素方法,此外,foreach能处理数组有一个非零下界的情况
通常使用锯齿形数组,而不是用矩形数组是有道理的,例如,你可能正在阅读一些关于资料库的信息1,每个顶级数组的元素可以代表一个容器,每个子容器可能有数量各异的元素,如果大部分子元素只含有一小撮元素,而其中一个子容器包含100个元素,一个矩形数组将浪费大量的空间,因为不管怎么样都会为每个子容器分配100个元素的空间,由于不能假设每个子数组都有相同元素个数,锯齿形数组通常节省空间,但访问锯齿形数组要更加小心
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { int [,] twoDim1 = new int[5, 3]; int [,] twoDim2={{1,2},{4,5},{7,8},{10,11}}; for (int i = 0; i != twoDim2.GetLength(0); ++i) { for (int j = 0; j != twoDim2.GetLength(1); ++j) { Console.WriteLine(twoDim2[i, j]); } } Console.WriteLine("-----------------------------------"); //没有设定数组下标 根据GetLowerBound、GetUpperBound获取最低数组下标 for (int i = twoDim2.GetLowerBound(0); i <= twoDim2.GetUpperBound(0); ++i) { for (int j = twoDim2.GetLowerBound(1); j <= twoDim2.GetUpperBound(1); ++j) { Console.WriteLine(twoDim2[i, j]); } } int [][] jagged=new int [3][]; jagged[0]=new int[]{1,2}; jagged[1] = new int[] { 1, 2, 3, 4, 5, 6 }; jagged[2] = new int[] { 6, 7, 8 }; foreach (int[] ar in jagged) { StringBuilder sb = new StringBuilder(); foreach (int n in ar) { sb.AppendFormat("{0}", n); } Console.WriteLine(sb.ToString()); } Console.WriteLine("-----------------------------------"); for (int i = 0; i < jagged.Length; ++i) { StringBuilder sb = new StringBuilder(); for (int j = 0; j < jagged[i].Length; ++j) { sb.AppendFormat("{0}", jagged[i][j]); } Console.WriteLine(sb.ToString()); } Console.WriteLine("-----------------------------------"); Console.WriteLine(twoDim2.Length); Console.WriteLine(twoDim2.GetLength(0)); Console.WriteLine(twoDim2[1,1]); Console.WriteLine("-----------------------------------"); Console.WriteLine(twoDim2.GetLowerBound(0)); Console.WriteLine(twoDim2.GetUpperBound(1)); Console.ReadLine(); } } }
281

被折叠的 条评论
为什么被折叠?



