22

私は持っていList<List<int>>ます。List<int>各intが一意になるように変換したいと思います。LINQ を使用して、これに対するエレガントなソリューションを誰かが持っているかどうか疑問に思っていました。

Union メソッドを使用できるようにしたいのですが、毎回新しい List<> が作成されます。したがって、次のようなことは避けたいと思います。

List<int> allInts = new List<int>();

foreach(List<int> list in listOfLists)
   allInts = new List<int>(allInts.Union(list));

助言がありますか?

ありがとう!

4

3 に答える 3

60
List<List<int>> l = new List<List<int>>();

l.Add(new List<int> { 1, 2, 3, 4, 5, 6});
l.Add(new List<int> { 4, 5, 6, 7, 8, 9 });
l.Add(new List<int> { 8, 9, 10, 11, 12, 13 });

var result = (from e in l
              from e2 in e
              select e2).Distinct();

更新 09.2013

しかし、最近は実際には次のように書きます

var result2 = l.SelectMany(i => i).Distinct();
于 2009-01-20T20:12:46.160 に答える
16
List<int> result = listOfLists
  .SelectMany(list => list)
  .Distinct()
  .ToList();
于 2009-01-20T20:36:07.877 に答える
10

どうですか:

HashSet<int> set = new HashSet<int>();
foreach (List<int> list in listOfLists)
{
    set.UnionWith(list);
}
return set.ToList();
于 2009-01-20T20:09:49.380 に答える