C#数组初始化简析
时间:2022-01-02 11:55:12
题外话:学习.NET已经有一年了,从C#->ASP.NET->WPF。主要以看电子书为主,比较少写代码。现在回头学习以前接触过的,随着知识与经验的的积累。
总是有各种惊喜,震惊!C#数组就是其中之一,我把它作为自己博客园的处女作。
C#数组与其它C系列语言有着很多的不同,以前接触的时候理解出现很大的偏差。尤其是对多维数组的认识。多维数组与C语言相比是一个新概念。而最开始的
时候我把它当成交错数组的特殊类型。
首先重二维数组与简单的交错数组的初始化与访问开始
int[,] nums={
{1,2,3},
{1,2,0}
};
for (int i = nums.GetLowerBound(0); i <= nums.GetUpperBound(0); i++)
{
for (int j = nums.GetLowerBound(1); j <= nums.GetUpperBound(1); j++)
{
Console.WriteLine(nums[i,j]);
Console.WriteLine(nums.GetValue(i,j));
}
}
foreach (var num in nums)
{
Console.WriteLine(num);
}
//对任意维度的数组,都可以这样快速访问,只是foreach不能修改变量。
而交错数组也能实现差不多的内容
int[][] nums2 ={
new int[]{1,2,3},
new int[]{1,2,0}
};
for (int i = nums2.GetLowerBound(0); i <= nums2.GetUpperBound(0); i++)
{
for (int j = nums2[i].GetLowerBound(0); j <= nums2[i].GetUpperBound(0); j++)
{
Console.WriteLine(nums2[i][j]);
}
}
foreach (var ia in nums2)
{
foreach (var i in ia)
{
Console.WriteLine(i);
}
}
多维数组存储的数据可以用交错数组替代。交错数组是一个有高维度的特殊数组。而交错数组是数组的数组。而且数组有一个很重要的性质,
数组里面储蓄的必须是相同的类型!这对理解各种复杂数组是很重要的。
复杂的交错数组
bool[][][] cells31 = new bool[2][][]
{
new bool[2][]
{
new bool[] {false},
new bool[] {true}
},
new bool[3][]
{
new bool[] {false},
new bool[] {true},
new bool[] {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 = new bool[1][,][]
{
new bool[2,2][]
{
{
new bool[2] {false, true},
new bool[2] {false, true}
},
{
new bool[2] {false, true},
new bool[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#定义描述 array of( multi-array of( array of (nulti-array)))
int[][,][][, , ,] arr = new int[10][,][][,,,];
//初始化 二维int数组存放(一维int数组存放(四维int数组))
arr[4] = new int[1, 2][][,,,];
//初始化 一维int数组存放(四维int数组)
arr[4][0, 1] = new int[3][, , ,];
//初始化 四维int数组
arr[4][0, 1][2] = new int[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#语言,数组,初始化
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
详谈Java中的事件监听机制
2022-08-05 00:29:30
java贪吃蛇游戏编写代码
2023-06-16 02:41:10
![](https://img.aspxhome.com/file/2023/3/74753_0s.jpg)
java实现简单的英文文本单词翻译器功能示例
2023-11-28 10:22:15
![](https://img.aspxhome.com/file/2023/8/59178_0s.png)
深入理解ThreadLocal工作原理及使用示例
2022-02-27 19:24:14
![](https://img.aspxhome.com/file/2023/6/62066_0s.png)
java通过方向键控制小球移动的小游戏
2023-11-10 05:25:59
阿里nacos+springboot+dubbo2.7.3统一处理异常的两种方式
2022-12-05 03:50:25
![](https://img.aspxhome.com/file/2023/4/70944_0s.png)
Mybatis 复杂对象resultMap的使用
2023-10-12 22:56:44
![](https://img.aspxhome.com/file/2023/7/58557_0s.png)
详解APP微信支付(java后台_统一下单和回调)
2023-11-10 17:26:42
![](https://img.aspxhome.com/file/2023/3/59153_0s.png)
Java中遍历Map的六种方法实现
2022-03-21 13:30:58
Java内部类及其特点的讲解
2023-06-09 19:39:41
![](https://img.aspxhome.com/file/2023/7/61657_0s.png)
Java多个版本切换的几种方法
2022-04-22 14:10:15
![](https://img.aspxhome.com/file/2023/8/63108_0s.png)
java解析excel文件的方法
2023-05-13 15:53:44
WinFrom中label背景透明的实现方法
2023-05-08 13:05:40
Java继承方法重写实现原理及解析
2021-12-31 16:35:54
![](https://img.aspxhome.com/file/2023/1/71671_0s.png)
Java实现简单的五子棋小游戏
2023-11-25 07:36:13
![](https://img.aspxhome.com/file/2023/2/59892_0s.jpg)
记一次公司JVM堆溢出抽丝剥茧定位的过程解析
2023-11-09 13:11:24
![](https://img.aspxhome.com/file/2023/7/59007_0s.jpg)
JAVA实现账户取款和存款操作
2023-08-22 16:31:45
Springboot初始化项目并完成登入注册的全过程
2023-07-31 15:09:09
![](https://img.aspxhome.com/file/2023/8/57948_0s.png)
Java IO流和文件操作实现过程解析
2022-03-10 02:08:13
Android解决所有双击优化的问题
2023-07-27 09:07:03
![](https://img.aspxhome.com/file/2023/0/86010_0s.png)