未知数量的列表c#.net的交集

Rob*_*len 2 .net c# linq

我有一个dictionary<int, List<string>>,我希望与每个int的所有列表相交.

我怎么做到这一点?我觉得这应该很容易,但由于某种原因,它没有成功.

谢谢.

Ser*_*rvy 6

迭代列表序列很容易,将第一个列表放入a HashSet然后将每个子序列列表与它相交:

public static IEnumerable<T> intersectAll<T>(IEnumerable<IEnumerable<T>> source)
{
    using (var iterator = source.GetEnumerator())
    {
        if (!iterator.MoveNext())
            return Enumerable.Empty<T>();

        var set = new HashSet<T>(iterator.Current);
        while (iterator.MoveNext())
            set.IntersectWith(iterator.Current);

        return set;
    }
}
Run Code Online (Sandbox Code Playgroud)

使用它你可以写IntersectAll(dictionary.Values.Cast<IEnumerable<string>>())以获得交集.