6
votes

Vérifiez l'existence entre deux iEnumérables

bool hasItemNo;
foreach(string itemNo in existedThings)
    hasItemNo= thingsToSave.Contains(itemNo);

1 commentaires

Ne vous inquiétez pas pour cela, j'ai vu de loin pire des supposés d'anglais natif. Tu t'en sors bien!


7 Réponses :


4
votes

Vous pouvez utiliser Intersect code> Pour atteindre cet objectif:

// puts all items that exists in both lists into the inBoth sequence
IEnumerable<string> inBoth = existedThings.Intersect(thingsToSave);


0 commentaires

9
votes
 int[] id1 = { 44, 26, 92, 30, 71, 38 };
 int[] id2 = { 39, 59, 83, 47, 26, 4, 30 };

 IEnumerable<int> both = id1.Intersect(id2);

 foreach (int id in both)
     Console.WriteLine(id);

 //Console.WriteLine((both.Count() > 0).ToString());
 Console.WriteLine(both.Any().ToString());
Look for the Enumerable.Intersect Method

1 commentaires

Utilisez. Nan () au lieu de .Count ()> 0 pour éviter une itération inutile.



4
votes
bool hasItemNo = existedThings.Intersect(thingsToSave).Count() > 0;
You can even provide your own comparer if you need to: Enumerable.Intersect

0 commentaires


3
votes

C'est sale et ça ne marchera pas aussi! Votre hasitemno ne serait que true si la la dernière valeur in existait était dans Thingstosave .

Depuis que vous avez marqué cela avec "Linq", je suppose que ce code fonctionnera pour vous: xxx


1 commentaires

Bonne prise sur la mission booléenne! +1



2
votes

Pas absolument clair sur ce que vous voulez vraiment ici, mais voici une suggestion de récupérer uniquement les cordes qui existent dans ThingStosave et existaient.

IEnumerable<String> existedThings = 
        from mdinfo in mdInfoTotal select mdinfo.ItemNo;

IEnumerable<String> thingsToSave = 
        from item in lbXReadSuccess.Items.Cast<ListItem>() 
        where existedThings.Contains(item.Value)
        select item.Value;


0 commentaires

8
votes

Les réponses susceptibles de proposer un algorithme qui aura une complexité O (n ^ 2) si l'iEnumerable n'a pas été dérivé d'une classe qui implémente l'ICollection <>. Une requête LINQ Par exemple. La méthode de l'extension Count () doit alors intituler tous les éléments pour les compter. Ce n'est pas cool. Il vous suffit de vérifier si le résultat contient tout élément : xxx

La commande compte BTW, rendez l'énumération que vous prévoyez avoir le plus petit nombre d'articles l'argument. d'intersect ().


1 commentaires

+1 pour indiquer l'ordre dans lequel vous utilisez les collections.