首頁 >後端開發 >C++ >LINQ如何有效率地辨識多個清單中一個清單唯一的元素?

LINQ如何有效率地辨識多個清單中一個清單唯一的元素?

Linda Hamilton
Linda Hamilton原創
2025-01-19 18:32:10841瀏覽

How Can LINQ Efficiently Identify Elements Unique to One List Among Multiple Lists?

使用LINQ來決定清單中獨特的元素

我們需要辨識只存在於一個清單中,而不存在於其他清單中的元素。 LINQ為此挑戰提供了一個簡潔的解決方案。

考慮以下程式碼片段:

<code class="language-csharp">class Program
{
    static void Main(string[] args)
    {
        // 初始化两个Person对象列表。
        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>

假設我們想要確定peopleList2中哪些人在peopleList1中不存在。為此,我們可以利用LINQ的Where()方法。

一種方法是使用Any()方法:

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

此查詢檢查peopleList2中的每個人,查看peopleList1中是否存在任何ID相同的人。如果沒有符合項,則該人員包含在結果中。

或者,表達相同邏輯的更簡潔的方法是:

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

在這種情況下,All()檢查peopleList1中的所有人員的ID是否與peopleList2中目前人員的ID不同。如果此條件成立,則該人員包含在結果中。

注意: 重要的是要注意,這兩種方法都執行O(n*m)操作,這可能會導致大型資料集的效能問題。可能需要其他方法來優化效能。提供的LINQ語法為問題提供了一個簡單的解決方案,但始終建議根據專案的效能要求進行評估。

以上是LINQ如何有效率地辨識多個清單中一個清單唯一的元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn