J'essaie d'améliorer un filtre à une liste d'éléments correspondant à tous les éléments qui font face à une autre liste.
Donc, aujourd'hui, la liste de code ressemble ci-dessous: P>
var cond = "One,Two,Three"; var list2 = new List<String>(); foreach ( String l in cond.Split(',')) { list2.AddRange(list1.FindAll(n => n == l).ToList()); } Console.Writeline(list2.Count);//This is the result I'm looking for.
3 Réponses :
Vous pouvez convertir votre Cela vous permettra une liste de tous les articles cela répond à la condition. Si vous ne vous souciez que du nombre de comptes, vous pouvez utiliser: p> COND code> sur un tableau, puis vérifiez s'il
contient () code>
L'élément de la liste:
Si vous avez besoin de compter, vous pouvez utiliser compteur code> méthode LINQ avec
contient code> Intérieur:
var cond = "One,Two,Three";
var conditions = cond.Split(',').ToArray();
var count = list1.Count(w => conditions.Contains(w));
Console.Writeline(count);
Une autre solution et quelques choses que j'ai remarquées avec votre configuration pouvant être améliorée.
static void Main(string[] args) { //Rather than making a string you need to split into an array just start with one. string[] targetValues = { "One", "Two" }; //You don't need to use Upper Case for String when creating a this list List<string> queryValues = new List<string> { "One", "Two", "One", "Two", "Three", "Four" }; // Comparison done here List<string> results = queryValues.Where(x => targetValues.Contains(x)).ToList(); // Seperating the list for the printout for easier viewing Console.WriteLine(string.Join(", ", results)); }
Merci. Cela répond à ma question et répond aux meilleurs résultats.
Avez-vous besoin d'une liste ou d'un dictionnaire ferait.
"La boucle de foresach peut-elle être améliorée?" Quel est exactement vos critères? Durée? Mémoire? lisibilité? Caisse-caisse?
var newlist = list1.Intersect (list2) .tolist (); code>