2013-08-16 39 views
2

如果你有一個類似string [] []的數組,那麼假設前一個數組是矩形的(沒有鋸齒),將其轉換成一個常規的多維數組像string [,]的最聰明的方法是什麼?將[] []形式的數組轉換爲[,]的最明智的方法是什麼?

我能想到的唯一方法是獲取維度,用這些維度聲明多維數組,然後遍歷源數組並遍歷新數組。但我想知道是否有更簡單的解決方案。

+1

您提出的解決方案有哪些問題?您的需求不足以滿足您的需求? – Servy

+0

可能重複[轉換鋸齒陣列直接二維數組沒有迭代每個項目?](http://stackoverflow.com/questions/11438587/convert-a-jagged-array-to-a-2d-array-directly -without-iterating-each-item) – BartoszKP

+1

此外,爲什麼你更喜歡'[[]]'在'[] []'上面?通常是相反的。 – SimpleVar

回答

0

這只是爲了好玩:完全同意這是一個矯枉過正的行爲,最好的方式是正常的迭代。

//example jagged array 
    string[][] ja = new string[2][]; 

    for (int i = 0; i < 2; i++) 
     ja[i] = Enumerable.Range(0, 3).Select(k => "Cell [" + i + "," + k + "]").ToArray(); 

    //conversion to a 2D-array 
    string[,] ka = new[] { new string[ja.Length, ja[0].Length] } 
     .Select(_ => new { x = _, y = ja.Select((a, ia) => a.Select((b, ib) => _[ia, ib] = b).Count()).Count() }) 
     .Select(_ => _.x) 
     .First(); 

    //dump result 
    for (int i = 0; i < 2; i++) 
     for (int k = 0; k < 3; k++) 
     { 
      Console.WriteLine(ka[i, k]); 
     } 

幾乎不可讀,但它工作(至少當所述初始數組不爲空/畸形)。

+0

非常酷。感謝您的整潔解決方案。我同意,也許正常的迭代確實是最好的解決方案。正確答案。 – Dalal

相關問題