如何從兩個對象列表中找到所有實現IComparable的交集對象?C# - IComparable對象列表之間的交集
public List<T> Intersect<T>(List<T> list1, List<T> list2) where T : IComparable<T> {
return ... ;
}
如何從兩個對象列表中找到所有實現IComparable的交集對象?C# - IComparable對象列表之間的交集
public List<T> Intersect<T>(List<T> list1, List<T> list2) where T : IComparable<T> {
return ... ;
}
像這樣的事情
public List<T> Intersetc<T>(List<T> list1, List<T> list2) where T : IComparable<T>
{
return list1.Intersect(list2, new MyEqualityComparer<T>()).ToList();
}
public class MyEqualityComparer<T> : IEqualityComparer<T> where T : IComparable<T>
{
public bool Equals(T t1, T t2)
{
return t1.CompareTo(t2) == 0;
}
public int GetHashCode(T t)
{
return 0;
}
}
'GetHashCode'可能返回不同的值,而'CompareTo'返回0 –
這是真的。更新了答案。 –
我的意思是有些情況下't1.CompareTo(t2)== 0',但是'MyEqualityComparer
爲什麼不乾脆:
public List<T> Intersect<T>(List<T> list1, List<T> list2) where T : IComparable<T>
{
var intersect = list1.Intersect(list2);
return intersect.ToList();
}
它不使用IComparable
那麼,你有沒有嘗試過什麼了嗎?一個相當簡單的選擇是創建一個'IEqualityComparer',它使用'CompareTo'來檢查相等性,然後使用LINQ的'Intersect'方法... –