2017-11-07 20 views
-4

座標をコンソールに出力する前に配列をソートしようとしています。私は船の配列をY座標に基づいて解決しようとしました。私は順番にそれらを印刷することができるようにそれを並べ替える必要があります。私はArray.Sort(myArray)を試してみました - 失敗、私はリストや辞書に変換しようとしましたが、それが最善の方法であるかどうかはわかりません。助言がありますか?配列のソートC#

Need to resort the Ships array

+4

「Array.Sort(myArray)」が正確に何を意味するのですか?エラーメッセージはありますか?実際の結果は期待された結果と異なっていますか?もしそうなら、どうですか?例を挙げてください。いくつかの実際のコードを記述することをお勧めします。 – Codor

+0

配列の次元数はいくつですか?ここを参照してください。 https://msdn.microsoft.com/en-us/library/system.array.sort(v=vs.110).aspx –

+0

_ "Array.Sort(myArray)を試しました - 失敗しました" _質問として失敗します。常に完全なエラーの詳細、予想される結果、実際の結果などを含めてください。 –

答えて

0

のArray.sort(myarrayのは)あなたが期待する何をするためには、MyArrayというの要素は、(イム船を想定する予定)に匹敵する必要があります。つまり、それらの比較方法(おそらくY座標)を指定する必要があります。

このアプローチは、shipクラスにIComparableインターフェイスを実装させるか、またはa different sort methodを使用して、使用するコンペータを個別に定義することです。

あなたの質問には何も出ていないので、私は例コードを与えることはできません。

1

LINQ OrderBy()メソッドを使用します。あなたが最後BoardPositionのY座標でソートしたいと仮定すると、Y座標が(例えばintです)IComparableを実装します。

using System.Linq; 

Ship[] ships; 
Ship[] sorted = ships.OrderBy(s => s.BoardPositions.Last().YCoordinate).ToArray(); 

編集上記のコードは、Ship[] ships内のすべての船舶のためのことを前提としてでは少なくとも1つのエントリBoardPositionsが存在します。 BoardPositionsが空の場合は、LastOrDefault()とnull条件付き演算子?.を使用します。

Ship[] sorted = ships 
    .OrderBy(ship => ship.BoardPositions.Any()) 
    .ThenBy(ship => ship.BoardPositions.LastOrDefault()?.YCoordinate) 
    .ToArray(); 
+0

は次のエラーを受け取りました: "オブジェクト参照がオブジェクトのインスタンスに設定されていません" – Adam

+0

@ Adam何とか 'ships'配列を初期化する必要があります。どのように元のコードでそれを埋めるのですか? –

+0

それはプライベートセットだけです。public get - 私はそれを変更することはできません。それは、種類の割り当てです。 – Adam