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>