1

オブジェクトのリストが 2 つあります。各オブジェクトには、それ自体が「推奨」オブジェクトのリストであるプロパティ Recommendations があります。プロパティの 1 つに基づいてレコメンデーション オブジェクトを並べ替えたいと考えています。私はこれを思いついた:

TPSqlORs.Where(x => x.Recommendations != null)
    .ToList()
    .ForEach(y => y.Recommendations.OrderBy(z => z.PointNumber));
SbmReportsORs.Where(x => x.Recommendations != null)
    .ToList()
    .ForEach(y => y.Recommendations.OrderBy(z => z.PointNumber));

しかし、元のリストはまったく変更されないためToList()、コピーを作成しているだけで、実行後に失われたコピーで並べ替えが行われていると思われます。これらの行に沿って検索しましたが、明らかにコピーを作成しますが、新しいリストには元のリスト要素への参照が含まれているため、両方のリストでそれらをソートする必要がありますか?

4

4 に答える 4

2

Recommendations実際には a であるため、List<Recommendation>次を使用してその場で並べ替えることができますList.Sort()

item.Recommendations.Sort((lhs, rhs) => lhs.PointNumber.CompareTo(rhs.PointNumber));

これは、ソートしたい をitem含むオブジェクトであると想定しています。Recommendations

リスト内の要素が null になる可能性がある場合Recommendationは、次のように処理できます。

item.Recommendations.Sort
(
    (lhs, rhs) =>
    (lhs == null || rhs == null)
    ? Comparer<object>.Default.Compare(lhs, rhs) 
    : lhs.PointNumber.CompareTo(rhs.PointNumber)
);

詳細List.Sort(Comparison<T> comparison)については、を参照してください。

List.Sort()不安定なソートEnumerable.OrderBy()ですが、安定したソートですが、これがケースに違いをもたらす可能性は低いことに注意してください。ただし、違いを認識する必要があります。

[編集: 以下の Jeppe Stig Nielsen のコメントからコードを組み込みました。彼に感謝します。]

于 2013-10-02T09:17:11.087 に答える