最近學習linq,本來是想用linq把2個List去重。
自己寫的是 list1.RemoveAll(m=> list2.FindIndex(n=>n.name== m.name) > 0);
發現只能去除1行,想知道怎么寫比較好。
然后看到個取交集的寫法:var list = list1.Where((x, i) => list2.FindIndex(z => z.name== x.name) == i).ToList(); 這個方法是獲取交集,蛋疼的是看不懂 i這個引數的作用,特請教一下大家
uj5u.com熱心網友回復:
list1.RemoveAll( m=>list2.FindAll( n=>n.name==m.name)) 這句不知道是不是你想要的結果。Linq還有很多更無法理解的東西,加油!
uj5u.com熱心網友回復:
//合并+去重
list1.Concat(list2).Distinct().ToList();
//交集
list1.Intersect(list2).ToList();
//差集,去除list1中同list2的element
list1.Except(list2).ToList();
uj5u.com熱心網友回復:
var list = list1.Where((x, i) => list2.FindIndex(z => z.name== x.name) == i).ToList();x是list1的元素
i是元素的下標
如果list1跟list2相同元素的下標不一致,這段代碼應該無法獲取到交集
uj5u.com熱心網友回復:
你把滑鼠移動到 i 上,就知道了。
uj5u.com熱心網友回復:
報錯的
uj5u.com熱心網友回復:
資料來源不同的, 你這樣去除是應該根據hashcode比較的,應該不是我要的效果
uj5u.com熱心網友回復:

看圖都沒問題的
uj5u.com熱心網友回復:
首先,list2.FindIndex()回傳的是list2的下標,應該是從0開始的:list1.RemoveAll(m=> list2.FindIndex(n=>n.name== m.name) > -1);
按道理這樣寫沒啥問題的,至少在我的電腦上是運行正確的。需要看下兩個list的實際內容,可能資料有問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/235921.html
標籤:C#
上一篇:C#中xml生成節點是多出xmlns:xsi="urn:hl7-org:v3",100分題
下一篇:vs
