Ala*_*ain 11 c# arrays initialization multidimensional-array
在C#中,可以使用如下常量初始化多维数组:
Object[,] twodArray = new Object[,] { {"00", "01", "02"},
{"10", "11", "12"},
{"20", "21", "22"} };
Run Code Online (Sandbox Code Playgroud)
我个人认为使用硬编码常量初始化数组对于测试练习以外的任何其他内容都是无用的.无论如何,我迫切需要做的是使用现有数组初始化一个新的多维数组.(具有相同的项目数,但内容当然仅在运行时定义).
我想做的一个例子是.
Object[] first = new Object[] {"00", "01", "02"};
Object[] second = new Object[] {"10", "11", "12"};
Object[] third = new Object[] {"20", "21", "22"};
Object[,] twodArray = new Object[,] { first, second, third };
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不能编译为有效代码.有趣的是,当我尝试的时候
Object[,] twodArray = new Object[,] { {first}, {second}, {third} };
Run Code Online (Sandbox Code Playgroud)
代码确实编译并运行,但结果并不理想 - 一个3乘3的对象数组,出来的是一个3乘1的数组,每个数组都有3个元素.发生这种情况时,我无法使用以下方法访问我的数组:
Object val = twodArray[3,3];
Run Code Online (Sandbox Code Playgroud)
我得走了:
Object val = twodArray[3,1][3];
Run Code Online (Sandbox Code Playgroud)
这显然不是理想的结果.
那么,有没有办法从多个现有数组初始化这个新的2D数组而不需要迭代?
如果切换到锯齿状数组,这将有效:
int[] arr1 = new[] { 1, 2, 3 };
int[] arr2 = new[] { 4, 5, 6 };
int[] arr3 = new[] { 7, 8, 9 };
int[][] jagged = new[] { arr1, arr2, arr3 };
int six = jagged[1][2];
Run Code Online (Sandbox Code Playgroud)
编辑为将来发现此主题的人员澄清
上面的代码示例也不合适,因为它导致数组(object [object []])而不是锯齿状数组(object [] []),这些数组在概念上是相同但不同的类型.
| 归档时间: |
|
| 查看次数: |
8890 次 |
| 最近记录: |