我試圖在一個特定的維度中檢查不同的字串,我很好奇這是否可以用Linq。
我有兩個具有相同結構的串列。
List<List<string>> List1 = new List< List< string>>() {new List< string>() {"ID1", "A"},
new List<string>() {"ID2","A"}。
List<List<string>> List2 = new List<List<string> > () {new List<string>() {"ID3", "A"},
new List<string>() {"ID4", "B"}};
我想做的是檢查兩個嵌套串列之間的差異,但問題是我只想檢查嵌套串列中[1]字串的差異。
所以......檢查上述兩個串列之間的差異的預期輸出將是一個字串的串列。
{"ID4", "B"}。
我已經嘗試使用:
IEnumerable<List<string>> ListDiff = List1.Except(List2)。
但是,由于嵌套串列中的[0]維度,ListDiff回傳每個元素。我想忽略嵌套串列[0],只檢查[1](在嵌套串列中)。
uj5u.com熱心網友回復:
你仍然可以利用Except()函式,它有一個多載,需要一個IEqualityComparer< T> 。 你可以實作你自己的,這樣它就可以比較串列中的第二個專案,就像這樣:
public class MyListComparer : IEqualityComparer<List<string> >
{
public bool Equals(List< string> x, List<string> y)
{
if (x == null || y == null)
return false;
return x[1] == y[1] 。
}
public int GetHashCode(List< string> x)。
{
if (x == null) return 0;
return x[1].GetHashCode()。
}
}
然后你將這個比較器的一個新實體傳遞給Except()函式:
List<List<string>> diff = List2.Except(List1, new MyListComparer() ).ToList()。
這個例子沒有處理邊緣情況,即你的串列中的專案數量小于或大于2。如果你需要這種邏輯,你可以自己在比較器中相當容易地實作它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/310077.html
標籤:
下一篇:如何用Linq過濾子物體?
