2011-10-27 12 views
0

私は、文字列 Linqを使用して2次元配列をソートするにはどうすればよいですか?

string [] [] myArray; 

の2次元配列を持っていると私は、列のいずれかでそれをソートしたいです。

ので、データは

{ "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

それは本当に簡単ですか? : – 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

関連する問題