0

を使用して、null 許容の int プロパティでリストをソートするにはどうすればよいSystem.Collections.Generic.List<T>.Sortですか?

または、それが不可能なため、手動でソートする必要がありますか?

4

2 に答える 2

6

最初に、null 値が値を持つアイテムとどのように比較されるかを決定する必要があります。その後、比較を実行できます。たとえば、null が常に非 null よりも「小さい」と判断した場合:

list.Sort((x,y) => {
  if(!x.Nullable.HasValue) {
     if(!y.Nullable.HasValue) return 0; // equal
     else return -1; // y is greater
  }
  else
  {
    if(!y.Nullable.HasValue) return 1; // x is greater
    if(x == y) return 0; // equal
    if(x < y) return -1; // y is greater
    else return 1;
  }
}
于 2012-08-03T21:18:11.520 に答える
0

初心者の開発者は最初にnullを必要とするため、デフォルトの並べ替えの実装を使用できます。

List<int?> myList = new List<int?>() { 2, -3, null, 9 };

myList.Sort();

for (int i = 0; i < myList.Count; i++)
    Console.WriteLine(myList[i]);  //null, -3, 2, 9

別の注文が必要な場合は、PeterRitchieのソリューションを使用してください。

編集:ちょうど気づいた、これはおそらくリスト内のクラスのnull許容プロパティのためであり、その場合はLINQのデフォルトのOrderBy実装を使用します:

public class MyClass
{
    public int? Value;
}

List<MyClass> myList = new List<MyClass>()
{
    new MyClass() { Value = 2},
    new MyClass() { Value = -3},
    new MyClass() { Value = null},
    new MyClass() { Value = 9},
};

var sorted = myList.OrderBy(entry => entry.Value).ToList();

for (int i = 0; i < sorted.Count; i++)
    Console.WriteLine(sorted[i].Value); //null, -3, 2, 9

LINQを使用したくない場合の別のケースは、次のList.Sortメソッドでデフォルトの比較子を使用することです。

myList.Sort((x, y) =>
    {
        return System.Collections.Generic.Comparer<int?>.Default.Compare(x.Value, y.Value);
    });
于 2012-08-03T21:30:28.247 に答える