19

Linq.Enumerableクラスからこのコードをチェックしてください:

static IEnumerable<TSource> DistinctIterator<TSource>(IEnumerable<TSource> source, IEqualityComparer<TSource> comparer) {
        Set<TSource> set = new Set<TSource>(comparer);
        foreach (TSource element in source)
            if (set.Add(element)) yield return element; 
    }

Microsoft の担当者がSet、通常の ではなく、この内部実装を使用することにしたのはなぜHashSetですか? 何らかの点で優れている場合は、一般に公開してみませんか?

4

1 に答える 1

12

これの実装は、要素を追加および削除し、LINQ 内部プロセスの存在を確認するだけでよいため、Set<T>はるかに簡単です。HashSet<T>インターフェイスを実装したり、イテレータなどを公開したりしません。

したがって、LINQ が使用する目的に対してはおそらく高速です。

于 2013-06-12T08:39:29.740 に答える