1. ホーム
  2. c#

[解決済み] Distinct()メソッドはシーケンスの元の順序を維持しますか?

2023-02-23 09:04:25

質問

リスト内のユニークな要素の順序を変更することなく、リストから重複を削除したいです。

Jon Skeet &他の人は、以下を使用することを提案しました。

list = list.Distinct().ToList();

参照

一意な要素の順序が以前と同じになることは保証されているのでしょうか?もしそうなら、ドキュメントでそれに関するものを見つけられなかったので、これを確認するリファレンスを与えてください。

どのように解決するのですか?

保証はできませんが、最もわかりやすい実装です。ストリーミングで実装するのは難しいでしょう(つまり、できるだけ読み込まずに、できるだけ早く結果を返すような)。 を使わずに 順番に返すことです。

私のブログの記事を読むといいかもしれません。 EdulinqのDistinct()の実装 .

なお、仮にこれがLINQ to Objectsで保証されていたとしても(個人的には であるべきだと個人的には思います)、それは LINQ to SQL のような他の LINQ プロバイダーには何の意味もないでしょう。

LINQ to Objects 内で提供される保証のレベルは、IMO では時々、少し一貫性がありません。いくつかの最適化は文書化されていますが、そうでないものもあります。ヘック、いくつかのドキュメントは完全に が間違っている .