15

誰かが答えを知っているかどうか疑問に思ったLINQの質問がありました。

通常、「最新の追加者」など、特定のフィールドで並べられたレコードを見つけたい場合は、次のように記述します。

MyCollection.OrderByDescending(x => x.AddedDate).FirstOrDefault();

最近、私はチーム内で書くことを好む別の開発者からいくつかの作業を受け取りました:

MyCollection.OrderBy(x => x.AddedDate).LastOrDefault();

だから私の質問はこれです.降順で最初のものを選択するのは、他の方向を注文して最後に選択するよりも速いですか、それとも遅いですか?

私の考えでは、オブジェクトを返すときに「これまで」コレクションを反復処理する必要がないため、最初の方が高速になると思いますが、これは他の何よりも予感です!

4

1 に答える 1

14

LINQ-to-Objects を使用している場合、最初のものはわずかに高速になります。2 つの並べ替えにかかる時間は同じですが* FirstOrDefault、. LastOrDefaultただし、ソートにかかる時間に比べれば、その差はごくわずかです。

Last(最上位の項目だけを取得するために全体の並べ替えを実行することは、 overを使用するよりもはるかに非効率的であることに注意してください。時間ではなく で必要な項目を取得するためにFirstMoreLINQ のMaxBy関数のようなものを実装することを検討してください。)O(n)O(n log n)

LINQ-to-何か他のもの (SQL、エンティティ) を使用している場合、おそらくまったく違いはありません。

* 一般に; RB が指摘しているように、データがすでにある程度順序付けられている場合、これは当てはまらない可能性があります。

于 2013-02-15T09:29:15.380 に答える