2011-10-27 116 views
0

我有一個字符串如何使用Linq對二維數組進行排序?

string [] [] myArray; 

的二維數組,我想其中的一列進行排序的。

所以數據可能

{ "Apple", "2", "Bob" }, 
{ "Banana", "1", "Fred" } 

而且我想任何這些列的排序它 - 我有一個索引。

理想情況下,我想這樣做myArray.Sort(1);

我明白我可能要使用自定義比較。我認爲這是一個有趣的學習機會。任何人都可以提供建議嗎?

+3

你怎麼能有這些字符串的2d鋸齒陣列?他們似乎是3字段(其中1是整數) – xanatos

+0

它是一個數組數組... ...所以myArray [0] = [「Apple」,「2」,「Bob」];即myArray [0,0]是Apple,0,1是「2」等。 – NibblyPig

+0

Ah ... 2是一個字符串:-) – xanatos

回答

4
var myOrderedRows = myArray.OrderBy(row => row[columnIndex]); 
+0

它不是末尾的數組:它是一個IOrderedEnumerable '。添加一個'ToArray()' – xanatos

+1

如果我重命名變量,你滿意嗎? ;) – fjdumont

+0

這真的很簡單嗎? :D – NibblyPig

1

你可以做這樣的...

IEnumerable<T> AsEnumerable(this T[,] arr) { 
    for(int i = 0; i < arr.GetLength(0); i++) 
    for(int j = 0; j < arr.GetLength(1); j++) 
     yield return arr[i, j]; 
} 

,然後寫例如:

int[,] data = // get data somwhere 
// After 'AsEnumerable' you can use all standard LINQ operations 
var res = data.AsEnumerable().OrderBy(n => n).Reverse(); 
2
Array.Sort(myArray, (p, q) => p[0].CompareTo(q[0])); 

這將在下達的指令陣列(所以在最後myArray將被排序)。 LINQ OrderBy通過比較創建一個新的有序枚舉,然後您可以將其轉換爲ToArray

+0

謝謝,這是有用的知道 – NibblyPig

相關問題