题外话:学习.NET已经有一年了,从C#->ASP.NET->WPF。主要以看电子书为主,比较少写代码。现在回头学习以前接触过的,随着知识与经验的的积累。
总是有各种惊喜,震惊!C#数组就是其中之一,我把它作为自己博客园的处女作。
C#数组与其它C系列语言有着很多的不同,以前接触的时候理解出现很大的偏差。尤其是对多维数组的认识。多维数组与C语言相比是一个新概念。而最开始的
时候我把它当成交错数组的特殊类型。
首先重二维数组与简单的交错数组的初始化与访问开始
代码如下:
int[,]nums={
{1,2,3},
{1,2,0}
};
for(inti=nums.GetLowerBound(0);i<=nums.GetUpperBound(0);i++)
{
for(intj=nums.GetLowerBound(1);j<=nums.GetUpperBound(1);j++)
{
Console.WriteLine(nums[i,j]);
Console.WriteLine(nums.GetValue(i,j));
}
}
foreach(varnuminnums)
{
Console.WriteLine(num);
}
//对任意维度的数组,都可以这样快速访问,只是foreach不能修改变量。
而交错数组也能实现差不多的内容
代码如下:
int[][]nums2={
newint[]{1,2,3},
newint[]{1,2,0}
};
for(inti=nums2.GetLowerBound(0);i<=nums2.GetUpperBound(0);i++)
{
for(intj=nums2[i].GetLowerBound(0);j<=nums2[i].GetUpperBound(0);j++)
{
Console.WriteLine(nums2[i][j]);
}
}
foreach(variainnums2)
{
foreach(variinia)
{
Console.WriteLine(i);
}
}
多维数组存储的数据可以用交错数组替代。交错数组是一个有高维度的特殊数组。而交错数组是数组的数组。而且数组有一个很重要的性质,
数组里面储蓄的必须是相同的类型!这对理解各种复杂数组是很重要的。
复杂的交错数组
代码如下:
bool[][][]cells31=newbool[2][][]
{
newbool[2][]
{
newbool[]{false},
newbool[]{true}
},
newbool[3][]
{
newbool[]{false},
newbool[]{true},
newbool[]{true}
}
};
我们必须这样初始化有一大堆new因为交错数组是数组的数组,所以我们以前一直嵌套。但是需要很多的数组类型,也可以创建无数的数组类型。
代码如下:
Console.WriteLine(“交错数组类型”);
Console.WriteLine(cells31[0].GetType());
Console.WriteLine(cells31[0][0].GetType());
Console.WriteLine(cells31[0][0][0].GetType());
//交错数组类型
//System.Boolean[][]
//System.Boolean[]
//System.Boolean
//这是交错数组里面的类型。
//bool[2][]与boo[3][]是相同的类型,所以我们创建存储结构不一致的数组
接下来是最复杂的类型。将交错数组与多维数组混合起来。如果能初始化下面的数组那么应该就理解的比较透彻了吧!
bool[][,,][][,,][]Foo;
我选择一个简单点作为示例bool[][,][]Foo;
代码如下:
bool[][,][]Foo=newbool[1][,][]
{
newbool[2,2][]
{
{
newbool[2]{false,true},
newbool[2]{false,true}
},
{
newbool[2]{false,true},
newbool[2]{false,true}
}
}
};
Console.WriteLine(“混合数组类型”);
Console.WriteLine(Foo.GetType());
Console.WriteLine(Foo[0].GetType());
Console.WriteLine(Foo[0][0,0].GetType());
Console.WriteLine(Foo[0][0,0][0].GetType());
//结果混合数组类型
//system.boolean[][,][]
//system.boolean[][,]
//system.boolean[]
//system.boolean
代码如下:
//定义交错数组:一维数组存放(二维int数组存放(一维int数组存放(四维int数组)))
//标准的C#定义描述arrayof(multi-arrayof(arrayof(nulti-array)))
int[][,][][,,,]arr=newint[10][,][][,,,];
//初始化二维int数组存放(一维int数组存放(四维int数组))
arr[4]=newint[1,2][][,,,];
//初始化一维int数组存放(四维int数组)
arr[4][0,1]=newint[3][,,,];
/ /初始化四维int数组
arr[4][0,1][2]=newint[1,2,3,4];
Console.WriteLine(arr.GetType());
Console.WriteLine(arr[4].GetType());
Console.WriteLine(arr[4][0,1].GetType());
Console.WriteLine(arr[4][0,1][2].GetType());
//System.Int32[,,,][][,][]
//System.Int32[,,,][][,]
//System.Int32[,,,][]
//System.Int32[,,,]
//C#编译器生成的免费精选名字大全与我们声明的是倒着的。理解起来应该也没差异吧
现在应该比较清晰了吧。我也不知道到底是不是每个程序员都理解这些,不过我是花了不少时间才明白的。
最后再考虑一下对数组方法的影响。尤其是Clear();
代码如下:
Console.WriteLine(Foo[0][0,0][0]);
//输出为Flase
Array.Clear(Foo,0,1);
Console.WriteLine(Foo[0][0,0][0]);
//这里会引发空引用异常。因为bool[][,]的类型的值已经变为null。
您可能感兴趣的文章:C#中数组初始化与数组元素复制的方法C#中数组初始化、反转和排序用法实例c#数组详解c#获取数组中最大数的值C#数组查找与排序实现代码C#泛型数组学习小结C#动态调整数组大小的方法C#初始化数组的方法小结
C++访问注册表获取已安装软件信息列表示例代码
C++Zip压缩解压缩示例(支持递归压缩)
上述就是C#学习教程:C#数组初始化简析分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/904353.html