0
votes

Comment puis-je améliorer une liste.Findall () avec des conditionnels ou basé sur un tableau?

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 commentaires

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 ();


3 Réponses :


0
votes

Vous pouvez convertir votre COND sur un tableau, puis vérifiez s'il contient () L'élément de la liste: xxx

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: xxx


0 commentaires

0
votes

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);


0 commentaires

0
votes

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));
        }


1 commentaires

Merci. Cela répond à ma question et répond aux meilleurs résultats.