Conversion de liste < Liste < T > > dans Liste < T > en C #
Question
J'ai une liste < liste < int > >
. Je voudrais le convertir en une liste < int >
où chaque int est unique. Je me demandais si quelqu'un avait une solution élégante à cela avec LINQ.
J'aimerais pouvoir utiliser la méthode Union, mais cela crée une nouvelle liste < > à chaque fois. Donc, je voudrais éviter de faire quelque chose comme ça:
List<int> allInts = new List<int>();
foreach(List<int> list in listOfLists)
allInts = new List<int>(allInts.Union(list));
Des suggestions?
Merci!
La solution
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();
Mise à jour 09.2013
Mais ces jours-ci, je l’écrirais en tant que
var result2 = l.SelectMany(i => i).Distinct();
Autres conseils
List<int> result = listOfLists
.SelectMany(list => list)
.Distinct()
.ToList();
Que diriez-vous de:
HashSet<int> set = new HashSet<int>();
foreach (List<int> list in listOfLists)
{
set.UnionWith(list);
}
return set.ToList();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow