Linq获取的值不会在多个列表中共享

Bra*_*ani 8 c# linq array-algorithms

编写一个比较n个列表并返回所有未出现在所有列表中的值的方法的最有效方法是什么,以便

var lists = new List<List<int>> {
                                  new List<int> { 1, 2, 3, 4 },
                                  new List<int> { 2, 3, 4, 5, 8 },
                                  new List<int> { 2, 3, 4, 5, 9, 9 },
                                  new List<int> { 2, 3, 3, 4, 9, 10 }
                                };


public IEnumerable<T> GetNonShared(this IEnumerable<IEnumerable<T>> lists)
{
  //...fast algorithm here
}
Run Code Online (Sandbox Code Playgroud)

以便

lists.GetNonShared();

返回1,5,8,9,10

我有

public IEnumerable<T> GetNonShared(this IEnumerable<IEnumerable<T>> lists)
{
  return list.SelectMany(item => item)
             .Except(lists.Aggregate((a, b) => a.Intersect(b));
}
Run Code Online (Sandbox Code Playgroud)

但我不确定这是否有效.订单无关紧要.谢谢!

mir*_*ych 5

        public static IEnumerable<T> GetNonShared<T>(this IEnumerable<IEnumerable<T>> list)
        {
           return list.SelectMany(x => x.Distinct()).GroupBy(x => x).Where(g => g.Count() < list.Count()).Select(group => group.Key);
        }
Run Code Online (Sandbox Code Playgroud)