J'essaie de retourner une valeur booléenne si ma liste d'objets contient tous les types d'une liste de types dans VB.NET ou C #. J'ai du mal à écrire une expression de Lambda pour y accomplir. Cela peut-il être fait en utilisant des prédicats de Lambda? Je sais que cela peut être fait facilement avec un pour chaque boucle.
vb.net p> c # p> Modifier, merci pour toutes les réponses rapides, je vois qu'il y a quelques façons de le faire, et de mieux comprendre ce qui se passe dans l'expression. P> P>
6 Réponses :
var containsAll = typeList.All(type => wList.Any(widget => widget.bearing.Equals(type))); Translated, it is true for all types in typeList that any (at least one) widget in the list has that type.
J'essaie de valider que tous les types existent dans la liste, pas seulement.
Oui, c'était ma compréhension. Pour tous les types de type Typelist Code> Il doit y avoir au moins un widget correspondant dans
wlist code>.
Peut-être que je ne le ss pas aussi clairement que possible, mais je veux m'assurer que tous les éléments de la classique code> correspondent à un élément dans wlist code> pour que je comparais chaque article dans
wluist code> pour vous assurer qu'il est également dans
type type code>
Dans ce cas, je pense que le nombre de réponses suggère un manque de clarté. "Si ma liste d'objets contient tous les types dans une liste de types." Si wlist code> contient tous les types de type
type type code>? C'était ma compréhension.
D'accord, après avoir passé la logique, je vois ce que ça fait maintenant, je pensais qu'à d'abord, c'était juste vérifier si tout code> l'un des types existait, mais je vois comment il utilise le
tout code> et ensuite le conditionnel
Cette réponse et la réponse Matt.g sont correctes, toutes les autres réponses vérifient la mauvaise route
Le plus court est
containsAllTypes = wList.Select(x => x.bearing).Intersect(typeList).Count() == typeList.Count;
Dim containsAllTypes As Boolean = wList.All(Function(a) typeList.Any(Function(b) b = a.bearing)) For each value in wList, it checks to see if any values in typeList match the wList bearing value.
Vous pouvez utiliser si vous devez avoir intersect code> pour vérifier si les deux liste ont les mêmes valeurs. Essayez ce code
hasall == true code> uniquement si tous les types de
wluist code> ont eu lieu une fois, supprimez l'appel sur < Code> distinct code> p> p>
Essayez var contient tous les types = type list.All (x => list.sélectionnez (x => x.bearing) .Contains (x)) code> p> p>
Cette solution fonctionne également, je pense que la logique est fondamentalement la même utilisation par contenant code> ou comme dans la réponse de Scott Hannen à l'aide de
n'importe quel code> tant qu'il est préfixé avec le
code> prédicat alors vérifie chacun.
Je crois ce que vous voulez, c'est ce qui suit: Vous pouvez également utiliser System.Linq comme suit: P> bool containsAllTypes2 = wList.All(a => typeList.Any(b => b == a.bearing));
Et si
wlist code> contient deux éléments avec
xtype code>? Et quels problèmes avec votre code actuel? Pouvez-vous montrer (en C # pseudo code) ce que vous essayez de faire de la balance?