web-dev-qa-db-ja.com

List.Sort(Comparison <T>比較を使用したC#でのリストの並べ替え

私は次のようにクラスを作成しました:

public class StringMatch
{
   public int line_num;
   public int num_of_words;
}

リストを作成しました

List<StringMatch> sm;

それにはいくつかの要素があります。

Comparison<T>比較オーバーロードを使用してこのリストを並べ替えるにはどうすればよいですか?並べ替えは、num_of_wordsフィールドに基づいて行う必要があります。

16
Kaushik

Linq OrderBy メソッドを使用できます-

sm = sm.OrderBy(i => i.num_of_words).ToList();
23
Sergey Litvinov

次のように、2つのオブジェクトを比較するラムダ式を記述できます。

sm.Sort((x,y)=>x.num_of_words.CompareTo(y.num_of_words));

-を追加すると逆ソートできます

sm.Sort((x,y)=>-x.num_of_words.CompareTo(y.num_of_words));
28

Microsoftの公式ドキュメント に使用例があります。この例では文字列を使用しています。 intに置き換えて使用してください。

private static int CompareDinosByLength(string x, string y)
{
   ...
}

List<string> dinosaurs = new List<string>();
dinosaurs.Add("Pachycephalosaurus");
dinosaurs.Add("Amargasaurus");
dinosaurs.Add("");
dinosaurs.Add(null);
dinosaurs.Add("Mamenchisaurus");
dinosaurs.Add("Deinonychus");
dinosaurs.Sort(CompareDinosByLength);

少しグーグルは長い道のりを進んでいます。

2
Gusdor

Comparisonの使用は、コレクションをソートするための古くて不格好な方法です。私のアドバイスは Linq にあるOrderByメソッドを使用することです:

var orderedSm = sm.OrderBy(x => x.num_of_words).ToList();
0
James