使用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中文網其他相關文章!