Si j'ai une variable de type IEnumerable<List<string>>
, y a-t-il une instruction LINQ ou une expression lambda que je peux appliquer et qui va combiner les listes retournant IEnumerable<string>
?Combinaison de listes dans Lambda/LINQ
Répondre
SelectMany - à savoir
IEnumerable<List<string>> someList = ...;
IEnumerable<string> all = someList.SelectMany(x => x);
Pour chaque élément somelist, celui-ci utilise alors le lambda "x => x" pour obtenir un IEnumerable <T> pour les éléments internes. Dans ce cas, chaque "x" est une Liste <T>, qui est déjà IEnumerable <T>.
Elles sont ensuite renvoyées en tant que bloc contigu. Essentiellement, SelectMany est quelque chose comme (simplifié):
static IEnumerable<TResult> SelectMany<TSource, TResult>(
this IEnumerable<TSource> source,
Func<TSource, IEnumerable<TResult>> selector) {
foreach(TSource item in source) {
foreach(TResult result in selector(item)) {
yield return result;
}
}
}
Bien que cela soit légèrement simplifié.
Pas exactement un seul appel de méthode, mais vous devriez être en mesure d'écrire
var concatenated = from list in lists from item in list select item;
Où des « listes » est votre IEnumerable<List<string>>
et concaténées est de type IEnumerable<string>
.
(Techniquement, cette est un seul appel de méthode pour SelectMany
-. Il ne ressemble pas à c'était tout ce que je voulais dire par la déclaration liminaire Je voulais juste éclaircir cela au cas où quelqu'un est embrouillé ou commenté - j'ai réalisé après avoir posté comment il aurait pu lire).
Faire une méthode simple. Pas besoin de LINQ:
IEnumerable<string> GetStrings(IEnumerable<List<string>> lists)
{
foreach (List<string> list in lists)
foreach (string item in list)
{
yield return item;
}
}
utilisant l'expression LINQ ...
IEnumerable<string> myList = from a in (from b in myBigList
select b)
select a;
... fonctionne très bien. :-)
b
sera un IEnumerable<string>
et a
sera un string
.
Voici une autre compréhension de requête LINQ.
IEnumerable<string> myStrings =
from a in mySource
from b in a
select b;
Que diriez-vous
myStrings.SelectMany(x => x)
bonne solution, avec une petite faute de frappe –
Merci. Mise à jour de la faute de frappe – JaredPar
- 1. Combinaison de plusieurs listes Triés
- 2. Combinaison de dictionnaires de listes en Python
- 3. Combinaison de deux listes et suppression des doublons, sans suppression des doublons dans la liste d'origine
- 4. Recherche Python dans les listes de listes
- 5. Combinaison de requêtes dans MySQL
- 6. Combinaison de bitmaps/ImageLists (Win32)
- 7. Combinaison de deux objets JSON dans un
- 8. Combinaison d'Enums
- 9. Combinaison de prédicats
- 10. Combinaison d'images
- 11. Fusionner deux listes de listes - Python
- 12. algorithme de combinaison de nombres
- 13. Combinaison de plusieurs flux RSS
- 14. Listes intermédiaires dans Haskell
- 15. Listes dans ConfigParser
- 16. C#: Combinaison de plages adjacentes
- 17. IE7 Poignée Combinaison Keypress
- 18. Comment convertir un tuple imbriqué de tuples et de listes en listes de listes en Python?
- 19. Recherche d'une combinaison d'octets spécifique dans NVARCHAR
- 20. Vim: Combinaison d'autocmd?
- 21. vérifier combinaison des enregistrements dans le tableau
- 22. Créer des listes de listes de manière pythonique
- 23. Combinaison SQL dynamique/conditionnelle?
- 24. C - Combinaison incorrecte pointeur/entier dans strftime()
- 25. Combinaison d'authentification OpenID & Facebook
- 26. Déplacement d'éléments dans deux listes de sélection
- 27. Mappage de sous-listes dans Scala
- 28. Listes conditionnelles de valeurs dans Oracle APEX?
- 29. Détecter l'événement de clé de combinaison
- 30. Combinaison de fichiers de module en Python
Et aucune raison de ne pas l'utiliser si vous utilisez .NET 3.5 (que l'on peut supposer de l'OP), ou C# 3.0 avec .NET 2.0 et LinqBridge. –
@Marc: Vous avez raison, surtout s'il y a un moyen simple de "linqish". Parfois, les gens essaient simplement de faire quelque chose de la manière LINQ et de rendre les choses simples plus difficiles à saisir. – VVS