2017-04-08 208 views
3

我不知道這是否可以在c#中使用,但如果是這樣,它會很好。我有對象的列表,這是非常容易轉換成與下面的代碼的數組:我可以將對象列表轉換爲二維數組嗎

object [] myArray = wrd.ToArray(); 

它工作正常,但我怎麼轉換列表中使用對象爲二維數組,其中從要素列表中的索引0到20將位於二維數組的第一行。列表中索引21至41的元素應位於二維數組的第二行。列表中從索引42到62的元素應該在二維數組的第三行等等。換句話說,每行應該有20個元素,並且有21行和21列。 Forinstens在圖像labyrint那麼字符'B'應該在索引[1,0]

但我不知道是否有可能,但希望有一個非常熟練的人可以幫助我。

+3

首先,您需要在每一行中包含多少個元素?你說20,然後立即反駁說每行應該有21列。這是什麼?其次,Stackoverflow不是一個免費的代碼寫入服務。向我們展示您嘗試過的方式以及遇到問題的地方。 –

+0

感謝您的回覆@Frauke Nonnenmacher,但數組索引從0開始,而不是從1開始。因此,如果您查看圖像,則會發現每行有21個字符,但是當您將它們放入零索引數組中時將是20個元素。這就是我寫20個元素的原因。我的問題如我的文章所述。我想將我的列表與對象轉換爲二維數組。 – cop77

回答

0

您可以遍歷數組並將項目放入一個2d中。

// Pseudo code... 
x = 0 
y = 0 
loop while i < originalArray.Length 

    2dArray[x,y] = originalArray[i] 
    i++ 
    y++ 

    if y >= 2dArrayRowLength 
     x++ 
     y=0 

end loop 

但是真的,爲什麼要麻煩。 C#中的二維數組實際上並沒有改變數據的存儲方式,它們只是以一種稍微不同的方式訪問一維數組的語法。在您訪問單維數組時,只需計算您的x偏移量即可。

有點像這樣。

object[] data = new object[100]; 

int xLength = 21; 
int yLength = 21; 
for (int x = 0; x < xLength; x++) 
{ 
    for (int y = 0; y < yLength; y++) 
    { 
     var theValue = data[(yLength * x) + y]; 
     Console.Write(theValue); 
    } 

    Console.WriteLine(); 
} 
相關問題