簡體   English   中英

如何從基於另一個列表的元素和條件的一個列表中刪除元素?

[英]How to Remove elements from one List based another list's element and condition?

如何從列表list1刪除列表項,該列表項使用LINQ在條件與列表2項list2情況下不重復

我知道如何以簡單的foreach方式進行操作,但我希望使用Linq樣式的單行代碼也能做到相同。

如何使用Linq做到這一點?

輸入清單

list1 = new List(){new object{id = 40},new object{id = 50},new object{id = 60}}
list2 = new List(){new object{id = 400},new object{id = 50},new object{id = 600}}

預期輸出應來自list1

new object{id = 40},new object{id = 60}

您可以刪除以下元素:

list1.RemoveAll(item => list2.Any(item2 => item.Key == item2.Key))

嘗試這個:

var list = list1.RemoveAll(l => list2.Contains(l));

換句話說,

var list1 = Provider.FillList<SomeType>();
var list2 = Provider.FillList<SomeType>();
list1.RemoveAll(n=> list2.Exists(o=> o.Key == n.Key));

您也可以嘗試

list1.addRange(list2)
then next line would be a simple list1.Distinct(X=>x.Key1).ToList();

或簡單將是

list1.Except(list2,IEqualityComparer);

但是,您將需要實現equals方法才能使其工作。

另一種方式是實施聯盟

var result = List1.Union(List2, myEqualityComparer);

除了使用相同的邏輯外,還有幾種方法可以使用鏈接來欺騙最終結果,其中大多數方法效率低下,計算時間長

我可以用Join語句解決這個問題:

var l = list1.Join(list2, outer => outer.Key, inner => inner.Key, (inner, outer) => outer);

其中outer是list1, inner是list2。 結果是一個列表,其中包含具有相同Key所有元素,並假設Key是元素的屬性。

以下代碼為我工作:

var list1 = new List<a> { new a { id = 40 }, new a { id = 50 }, new a { id = 60 } }; 
var list2 = new List<a> { new a { id = 400 }, new a { id = 50 }, new a { id = 600 } }; 

varexceptedItems = list1.Select(x => x.id).Except(list2.Select(y => y.id))。ToList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM