سؤال

ولدي List<List<int>>. أود أن تحويله إلى List<int> حيث كل كثافة فريدة من نوعها. وأتساءل عما إذا كان أي شخص حلا رائعا لهذا LINQ استخدام.

وأود أن تكون قادرة على استخدام الأسلوب الاتحاد ولكنه يخلق في كل قائمة جديدة <>. لذلك أود أن تجنب القيام بشيء من هذا القبيل:

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

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

وأي اقتراحات؟

وشكرا!

هل كانت مفيدة؟

المحلول

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();

نصائح أخرى

List<int> result = listOfLists
  .SelectMany(list => list)
  .Distinct()
  .ToList();

وماذا عن:

HashSet<int> set = new HashSet<int>();
foreach (List<int> list in listOfLists)
{
    set.UnionWith(list);
}
return set.ToList();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top