Supposons que j'ai deux (ou plus) IEnumerable<T>
avec de nombreux éléments. Chaque IEnumerable
a un autre type T
. Les listes peuvent être extrêmement longues et ne doivent pas être complètement chargées en mémoire.Comment puis-je parcourir plusieurs IEnumerables simultanément
IEnumerable<int> ints = getManyInts();
IEnumerable<string> strings = getSomeStrings();
IEnumerable<DateTime> dates = getSomeDates();
Ce que je veux faire est de parcourir ces listes, et obtenir un élément contenant un int, une chaîne et un DateTime pour chaque étape, jusqu'à la fin de la plus longue ou la plus courte liste a été atteinte. Les deux cas doivent être pris en charge (bool param plus long vs plus court ou plus). Pour chaque élément indisponible dans les listes plus courtes (parce que la fin a déjà été atteinte), je m'attendrais à des valeurs par défaut. Est-il possible de faire cela avec linq en utilisant l'exécution différée? Je connais la solution utilisant IEnumerators directement combinée avec le rendement de rendement. Voir How can I iterate over two IEnumerables simultaneously in .NET 2
Vous êtes à la recherche d'une fonction 'Zip' qui accepte plus de deux paramètres. – Gabe
Ce que vous pouvez facilement faire en utilisant quelque chose comme 'var résultat = s1.Zip (s2.Zip (s3, (a, b) => nouveau {a, b}), (a, b) => nouveau {a = a , b = ba, c = bb}); ' – Mormegil
Que se passe-t-il si s2 est la liste la plus longue et si s1 ne contient que peu d'éléments? –