c#

时间:2017-05-01 04:05:58

标签: c# arrays

我正在将旧的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],但编译器不喜欢它。如果可能的话,我想保留一个三维数组(而不是使用列表或其他东西),所以我不必去更改我的代码。

3 个答案:

答案 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]);