這取決於你想要什麼:
// are there any common values between a and b?
public static bool SharesAnyValueWith<T>(this IEnumerable<T> a, IEnumerable<T> b)
{
return a.Intersect(b).Any();
}
對於不重疊的名單,這將通過迭代和b各一次。對於重疊的列表,這將遍歷a,然後遍歷b,直到找到第一個重疊元素。
// does a contain all of b? (ignores duplicates)
public static bool ContainsAllFrom<T>(this IEnumerable<T> a, IEnumerable<T> b)
{
return !b.Except(a).Any();
}
這將遍歷一次,然後將迭代通過b,停止b中的第一個元素不在a中。
// does a contain all of b? (considers duplicates)
public static bool ContainsAllFrom<T>(this IEnumerable<T> a, IEnumerable<T> b)
{
// get the count of each distinct element in a
var counts = a.GroupBy(t => t).ToDictionary(g => g.Key, g => g.Count());
foreach (var t in b) {
int count;
// if t isn't in a or has too few occurrences return false. Otherwise, reduce
// the count by 1
if (!counts.TryGetValue(t, out count) || count == 0) { return false; }
counts[t] = count - 1;
}
return true;
}
類似地,這將通過一次迭代,然後將至b迭代,b中不處於停止在第一元件上。
定義「份額值」。你的意思是「兩個名單中都包含完全相同的人」? –
我相信他的意思是有一些共同的價值(=相交),你可以從所需的方法'Bool DoIntersect(..)' –
得到,是的,具有相同Id的人。但是,實際上,我認爲我的代碼中存在一個錯誤。讓我測試並進行更正... – lsibaja