就是一个数组中的某个元素,当用数组下标表示的时候,需要用几个数字来表示才能唯一确定这个元素,这个数组就是几维。
例如,一个数字确定一个元素: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();
}
}
}