簡體   English   中英

C#中的三維數組

[英]three dimensional array in c#

我正在將舊的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]但編譯器不喜歡這樣。 如果可能的話,我想保留一個三維數組(而不是使用列表或其他東西),這樣我就不必去修改大量的代碼。

在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;

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;

只是問題或初始化鋸齒狀數組中的每個數組。

DesertFox發布的解決方案的替代方案。 由於前兩個維度是硬編碼的,因此您可以使用2D數組,並使用鋸齒狀數組作為第三個維度。 我以[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]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM