私は次のようにクラスを作成しました:
public class StringMatch
{
public int line_num;
public int num_of_words;
}
リストを作成しました
List<StringMatch> sm;
それにはいくつかの要素があります。
Comparison<T>
比較オーバーロードを使用してこのリストを並べ替えるにはどうすればよいですか?並べ替えは、num_of_words
フィールドに基づいて行う必要があります。
Linq OrderBy メソッドを使用できます-
sm = sm.OrderBy(i => i.num_of_words).ToList();
次のように、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));
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);
少しグーグルは長い道のりを進んでいます。
Comparison
の使用は、コレクションをソートするための古くて不格好な方法です。私のアドバイスは Linq にあるOrderBy
メソッドを使用することです:
var orderedSm = sm.OrderBy(x => x.num_of_words).ToList();