Maison >développement back-end >C++ >Comment LINQ peut-il identifier efficacement les éléments uniques d'une liste qui sont absents d'une autre ?

Comment LINQ peut-il identifier efficacement les éléments uniques d'une liste qui sont absents d'une autre ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-19 18:46:14714parcourir

How Can LINQ Efficiently Identify Unique Items in One List That Are Absent from Another?

Utilisez LINQ pour identifier efficacement les éléments uniques

LINQ (Language Integrated Query) fournit un ensemble d'outils polyvalent pour interroger des données de manière concise et efficace. Un scénario courant consiste à identifier les éléments présents dans une liste mais pas dans une autre.

Considérez l'extrait de code suivant :

<code class="language-csharp">class Program
{
    static void Main(string[] args)
    {
        List<Person> peopleList1 = new List<Person>();
        peopleList1.Add(new Person() { ID = 1 });
        peopleList1.Add(new Person() { ID = 2 });
        peopleList1.Add(new Person() { ID = 3 });

        List<Person> peopleList2 = new List<Person>();
        peopleList2.Add(new Person() { ID = 1 });
        peopleList2.Add(new Person() { ID = 2 });
        peopleList2.Add(new Person() { ID = 3 });
        peopleList2.Add(new Person() { ID = 4 });
        peopleList2.Add(new Person() { ID = 5 });
    }
}

class Person
{
    public int ID { get; set; }
}</code>

Énoncé du problème : Étant donné deux listes, peopleList1 et peopleList2, écrivez une requête LINQ pour déterminer les personnes uniques qui existent dans peopleList2 mais pas dans peopleList1. Dans cet exemple, les résultats souhaités sont les personnes ayant l'ID 4 et l'ID 5.

Solution LINQ : La requête LINQ suivante résout efficacement ce problème :

<code class="language-csharp">var result = peopleList2.Where(p => !peopleList1.Any(p2 => p2.ID == p.ID));</code>

Cette requête utilise la méthode Where(), qui filtre les éléments de peopleList2 en fonction de critères spécifiés. Dans ce cas, la condition vérifie si un élément de peopleList1 possède un ID qui correspond à l’élément actuel de peopleList2. S'il n'est pas trouvé (!peopleList1.Any() == true), l'élément est inclus dans le jeu de résultats.

Expression alternative : Alternativement, la requête peut être exprimée comme suit :

<code class="language-csharp">var result = peopleList2.Where(p => peopleList1.All(p2 => p2.ID != p.ID));</code>

Cette variante utilise la méthode All() pour évaluer si tous les éléments de peopleList1 ont un identifiant différent de celui de l'élément actuel de peopleList2. Si cette condition est vraie (peopleList1.All() == true), l'élément est inclus dans le jeu de résultats.

Remarque : Il est important de noter que la complexité de calcul des deux méthodes est O(n*m), où n représente le nombre d'éléments dans peopleList1 et m représente le nombre d'éléments dans peopleList2. Cela signifie que pour les grands ensembles de données, cette opération peut être lente. Si les performances posent problème, envisagez d'autres méthodes telles que les tables de hachage ou les opérations d'ensemble.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn