曲のリストがあるとしましょう。
Song {
public string Name = "";
public int PlayOrder = 0;
}
次に、それらを最初に0から始まるPlayOrderで、次に名前でアルファベット順に並べ替えます。
したがって、ソートされた結果のサンプルセットは(Name、PlayOrder)になります。
/*
Pachelbel's Canon, 0
A Happy Song, 4
Beethoven's 5th, 4
Some Other Song, 7
*/
PlayOrder = 4がアルファベット順にどのように並んでいるかを確認してください。それが目的です。
現在、1つのフィールドでのみ並べ替えています。
List<Song> final = new List<Song>();
...
final.Sort((x, y) => x.PlayOrder.CompareTo(y.PlayOrder));
return final;
上記のように、名前で並べ替えることもできますか?
return final.OrderBy(s => s.PlayOrder).ThenBy(s => s.Name);
引き続き並べ替え方法を使用する場合は、比較関数をよりスマートにする必要があります。
final.Sort((x, y) => {
var ret = x.PlayOrder.CompareTo(y.PlayOrder);
if (ret == 0) ret = x.Name.CompareTo(y.Name);
return ret;
});
LINQを使用する場合は、K Ivanovが投稿したものを使用できます。
ソングclass
を並べ替える方法が1つしかない場合は、IComparable
または_IComparable<Song>
_を実装する必要があります。
_List<Song> songs = GetSongs();
songs.Sort(); // Sorts the current list with the Comparable logic
_
リストを保存する方法が複数ある場合、_IEqualityComparer<T>
_は実装するインターフェースです。次に、その比較子をList<T>Sort()
の引数として提供できます。