我正在将旧的VC ++代码翻译成C#。在C ++程序中,我有一个三维数组,第三个维度在运行时指定,
int * init_ltr [26][28];
int init_ltr_size = x; // gets assigned to something
// array allocated and initialized
for (i=0; i < 26; i++)
for (j=0; j < 28; j++)
init_ltr[i][j] = new int [init_ltr_size];
我可以稍后引用项目,如:
init_ltr[firstchar-'a'][secchar-'a'][ix] = wordnum;
我如何在C#中执行此操作?我尝试将其声明为int [] init_ltr [26][28]
,但编译器不喜欢它。如果可能的话,我想保留一个三维数组(而不是使用列表或其他东西),所以我不必去更改我的代码。
答案 0 :(得分:2)
在c#中,您有两个选项,锯齿状数组和多维数组。多维数组往往具有更好的语法,见下文:
锯齿状阵列:
int[][][] init_ltr = new int[26][][];
int init_ltr_size = x;
// array allocated and initialized
for (i=0; i < 26; i++)
init_ltr[i] = new int[28][];
for (j=0; j < 28; j++)
init_ltr[i][j] = new int[init_ltr_size];
init_ltr[0][0][0] = 0;
多维数组:
int[,,] init_ltr = new int[26, 28, x];
init_ltr[0,0,0] = 0;
答案 1 :(得分:1)
<强> C#强>
var size1 = 26;
var size2 = 28;
var initLtr = new int[size1][][];
var initLtrSize = 33; // gets assigned to something
for (var i = 0; i < size1; i++)
{
initLtr[i] = new int[size2][];
for (var j = 0; j < size2; j++)
initLtr[i][j] = new int[initLtrSize]; //it could even be different sizes in each array e.g: new int[i + j]
}
initLtr[0][0][0] = 3;
这只是一个问题或初始化锯齿状阵列中的每个数组。
答案 2 :(得分:0)
DesertFox发布的解决方案的替代方案。由于前2个维度是硬编码的,因此可以使用2D数组并使用锯齿状数组作为第3维。我以[3,5]为例。您可以将其更改为[26,28]。
int[,][] init_ltr = new int[3, 5][]; // init_ltr [26, 28][]
int init_ltr_size = 2; // Assign some value
for (var i = 0; i <= init_ltr.GetUpperBound(0); i++)
for (var j = 0; j <= init_ltr.GetUpperBound(1); j++)
{
init_ltr[i, j] = new int[init_ltr_size];
for (var k = 0; k < init_ltr[i, j].Length; k++)
init_ltr[i, j][k] = (i + 1) * (j + 1) * (k + 1); // Assign some value
}
// Print values of arrays. Use int_ltr[i, j][k]
for (var i = 0; i <= init_ltr.GetUpperBound(0); i++)
for (var j = 0; j <= init_ltr.GetUpperBound(1); j++)
for (var k = 0; k < init_ltr[i, j].Length ; k++)
Console.WriteLine(init_ltr[i, j][k]);