2017-06-30 7 views
-1

このコードで何が問題になっていますか?.NETで2D配列をソートするOrderBy C#

私はSystem.Linq

int[,] array = new int[3, 3] { { 1, 4, 2 }, 
           { 4, 5, 1 }, 
           { 7, 3, 8 } 
          }; 

int[,] sortedByFirst = array.OrderBy(x => x[0]); 
int[,] sortedBySecond = array.OrderBy(x => x[1]); 
int[,] sortedByThird = array.OrderBy(x => x[2]); 

を使用していますエラー:

Are you missing a using directive or an assembly reference?

+0

あなたがいるので動作しません 'OrderedBy' –

+2

アレイは、非ジェネリック' IEnumerable'を実装 '使用していることを確認し' IEnumerable'はサブ配列ではなくすべてのint値を返します。そして、 'IEnumerable 'にキャストするだけでは、 'キャスト()'を使わなければなりません。 –

+0

@GeorgeAlexandriaを使用するための' 'IEnumerableをにキャストする必要があるので、あなたはSystem.Linq'名前空間 – juharr

答えて

0

2D配列は、LINQとうまく動作しません。 OrderByがn次元配列に実装されていても、受け取って並べ替えるとはどういうことがありますか?

Listと一緒に作業するほうがはるかに優れています。

var src = new List<int[]> { new[] { 1, 4, 2 }, 
        new[] { 4, 5, 1 }, 
        new[] { 7, 3, 8 } 
       }; 

var sortedByFirst = src.OrderBy(x => x[0]).ToList(); 
var sortedBySecond = src.OrderBy(x => x[1]).ToList(); 
var sortedByThird = src.OrderBy(x => x[2]).ToList(); 
0

達成しようとしていることについて曖昧さがあります。あなたは "列"のいずれかで並べ替えるときに、 "グリッドの行"を互いに同期させておきたいのですか?あるいは、ただ一つの「列」からの値を他の「列」とは別に、順番に返すことを期待していますか?

最初の場合は、この例のような別の質問のthisの例を参考にして、DataTableクラスを活用して行の混乱を避けることをおすすめします。

それは第二だ場合、あなたはちょうどあなたがint[][]を使用することを求めていたことを... ...ところで、私はあなたのコードを考えてarray[0].OrderBy(x=>x);

経由

 int[,] ordered = array.OrderBy(x => x[0]).ToArray(); 

を列を注文することができますタイプ配列ではなく、int[,]タイプの配列です。 OrderByはもう一方のものには存在しますが、あなたが思っているとは思っていません。私はちょうどそれを試みたが、私はそれが何をしているのか理解できない。

希望すると便利です。