Syntaxe d’initialisation d’une liste < T > avec la liste existante < T > objets
-
05-07-2019 - |
Question
est-il possible d'initialiser une liste avec d'autres listes en C #? Dites que je possède ces listes:
List<int> set1 = new List<int>() {1, 2, 3};
List<int> set2 = new List<int>() {4, 5, 6};
Ce que j'aimerais avoir, c'est un raccourci pour ce code:
List<int> fullSet = new List<int>();
fullSet.AddRange(set1);
fullSet.AddRange(set2);
Merci d'avance!
La solution
Pour autoriser les éléments en double (comme dans votre exemple):
List<int> fullSet = set1.Concat(set2).ToList();
Ceci peut être généralisé pour plus de listes, c'est-à-dire ... Concat (set3) .Concat (set4)
. Si vous souhaitez supprimer les éléments en double (ceux qui apparaissent dans les deux listes):
List<int> fullSet = set1.Union(set2).ToList();
Autres conseils
static void Main(string[] args)
{
List<int> set1 = new List<int>() { 1, 2, 3 };
List<int> set2 = new List<int>() { 4, 5, 6 };
List<int> set3 = new List<int>(Combine(set1, set2));
}
private static IEnumerable<T> Combine<T>(IEnumerable<T> list1, IEnumerable<T> list2)
{
foreach (var item in list1)
{
yield return item;
}
foreach (var item in list2)
{
yield return item;
}
}
var fullSet = set1.Union(set2); // returns IEnumerable<int>
Si vous souhaitez lister < int > au lieu de IEnumerable < int > tu pourrais faire:
List<int> fullSet = new List<int>(set1.Union(set2));
List<int> fullSet = new List<int>(set1.Union(set2));
peut fonctionner.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow