2016-09-27 2 views
1

私は以下のデータを含むオブジェクトの配列を持っています。割り当てられた整数値でオブジェクトの配列を並べ替える

unsortedArray = 
A : 1 
B : 2 
C : 3 
D : 4 
E : 5 
F : 6 
G : 7 
H : 8 
I : 9 
J : 10 
K : 11 
L : 12 
M : 13 
N : 14 
O : 15 
P : 16 
Q : 17 
R : 18 
S : 19 
T : 20 
U : 21 
V : 22 
W : 23 
X : 24 
Y : 25 
Z : 26 

私は高い整数値を持つオブジェクトがリストにさらに表示されるように、これらのオブジェクトをソートするためにしようとしているが、ソートと次の出力を受けています。..以下

sortedArray = 
Z : 26 
X : 24 
W : 23 
V : 22 
U : 21 
T : 20 
S : 19 
R : 18 
Q : 17 
P : 16 
O : 15 
N : 14 
M : 13 
L : 12 
K : 11 
J : 10 
I : 9 
H : 8 
G : 7 
F : 6 
E : 5 
D : 4 
C : 3 
B : 2 
Y : 25 
A : 1 

私が使用しているコードである..

var sortedArray= unsortedArray; 
Array.Sort(sortedArray, (x, y) => y.Point >= x.Point ? y.Point : x.Point); 

注:コードでは、Pointオブジェクトの整数値を意味します。

私は間違って何をしていますか?

+0

代理人は0,1または-1を返す必要があります。 '(x、y)=> xPoint.CompareTo(y.Point) 'を試してください。 –

答えて

1

Array.Sort(sortedArray, (x, y) => y.Point >= x.Point ? y.Point : x.Point); 

を交換してください。ドキュメントから:

戻り値の型:System.Int32 のxとyの相対値を示す符号付き整数です(次の表を参照)。

enter image description here

あなたは上記の表に従って値を返すとSortを使用している場合、配列には何をしたいの反対で昇順にソートされます。つまり、xがyより大きい場合は負の値を返し、xがyより小さい場合は正の値を返す必要があります。

Array.Sort(sortedArray, (x, y) => y.Point - x.Point); 
+0

戻り値として 'y.Point - x.Point'を使うことには注意が必要です。整数のオーバーフローは、奇妙な場所でその醜い頭を元に戻し、いくつかのバグを見つけにくくします。代わりに 'y.CompareTo(x)'をお勧めします。 –

1

あなたはArray.Sortに渡す2番目の引数がIComparer<T>ある

Array.Sort(sortedArray, (x, y) => y.Point >= x.Point ? 1 : -1); 
+0

等しいアイテムをより大きい(またはそれ以下の)ものとして扱うと、ソートアルゴリズムによっては無限ループになります。奇妙なことに、xとyを比較すると1を返すと、yとxを比較すると-1が返されると彼らは期待しています。それが真実でないなら、悪いことが起こる。 –

関連する問題