She*_*Pro 72 .net c# arrays visual-studio-2010
锯齿状数组和多维数组之间有什么区别.彼此之间有什么好处?
为什么Visual Studio不允许我这样做
MyClass[][] abc = new MyClass[10][20];
Run Code Online (Sandbox Code Playgroud)
(我们曾经在C++中这样做,但在C#中它用红色蠕动线强调[20] ..说无效的等级说明符)
但很高兴
MyClass[,] abc = new MyClass[10,20];
Run Code Online (Sandbox Code Playgroud)最后,我如何在一行中初始化它(就像我们在简单数组中一样{new xxx...}{new xxx....})
MyClass[][,][,] itemscollection;
Run Code Online (Sandbox Code Playgroud)the*_*oop 83
锯齿状数组是一个数组数组,因此a int[][]是一个数组int[],每个数组可以有不同的长度并占用内存中自己的块.多维数组(int[,])是单个内存块(本质上是一个矩阵).
您无法创建,MyClass[10][20]因为每个子数组都必须单独初始化,因为它们是单独的对象:
MyClass[][] abc = new MyClass[10][];
for (int i=0; i<abc.Length; i++) {
abc[i] = new MyClass[20];
}
Run Code Online (Sandbox Code Playgroud)
a MyClass[10,20]是可以的,因为它将单个对象初始化为具有10行和20列的矩阵
A MyClass[][,][,]可以像这样初始化(虽然没有经过编译测试):
MyClass[][,][,] abc = new MyClass[10][,][,];
for (int i=0; i<abc.Length; i++) {
abc[i] = new MyClass[20,30][,];
for (int j=0; j<abc[i].GetLength(0); j++) {
for (int k=0; k<abc[i].GetLength(1); k++) {
abc[i][j,k] = new MyClass[40,50];
}
}
}
Run Code Online (Sandbox Code Playgroud)请记住,CLR针对单维数组访问进行了大量优化,因此使用锯齿状数组可能会比相同大小的多维数组更快.
Ant*_*ram 33
锯齿状数组是一个数组数组.不保证每个阵列的大小相同.你可以有
int[][] jaggedArray = new int[5][];
jaggedArray[0] = { 1, 2, 3 }; // 3 item array
jaggedArray[1] = new int[10]; // 10 item array
// etc.
Run Code Online (Sandbox Code Playgroud)
它是一组相关的数组.
另一方面,多维数组更像是一个有凝聚力的分组,如盒子,桌子,立方体等,没有不规则的长度.也就是说
int i = array[1,10];
int j = array[2,10]; // 10 will be available at 2 if available at 1
Run Code Online (Sandbox Code Playgroud)
矩形数组对于每一行始终具有相同的列数.
MyClass[,] x = new MyClass[10,30]
Run Code Online (Sandbox Code Playgroud)
每行有30列,而在锯齿状数组中,这不是必需的.因此,我认为你必须分别初始化锯齿状阵列中的每一个'行':
MyClass[][] x = new MyClass[10][];
for(int i = 0; i < 10; i++)
{
x[i] = new MyClass[30];
}
Run Code Online (Sandbox Code Playgroud)
实际上,这意味着并非锯齿状数组中的每一行都必须包含相同数量的元素.(在我的例子中,它确实具有相同数量的元素,但这不是必需的).
你可以完美地做到这一点,例如:
MyClass[][] x = new MyClass[10][];
for(int i = 0; i < 10; i++)
{
x[i] = new MyClass[(30 + i)];
}
Run Code Online (Sandbox Code Playgroud)
这可能是一篇有趣的文章.
广告 3)要初始化这样的怪物[][,][,],您可以执行以下操作:
int [,][,] multiArr1 = { { new int[,] { { 2, 2 }, { 1, 1 } },
new int[,] { { 2, 2 }, { 1, 1 } } },
{ new int[,] { { 2, 2 }, { 1, 1 } },
new int[,] { { 2, 2 }, { 1, 1 } } } };
int [,][,] multiArr2 = { { new int[,] { { 2, 2 }, { 1, 1 } },
new int[,] { { 2, 2 }, { 1, 1 } } },
{ new int[,] { { 2, 2 }, { 1, 1 } },
new int[,] { { 2, 2 }, { 1, 1 } } } };
int [][,][,] superMultiArray = { multiArr1, multiArr2 };
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37857 次 |
| 最近记录: |