그것은 정확하게 당신이 원하는에 따라 달라 중복되지 않는 목록에 대한
// 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();
}
는, 이것이 반복 한 번 각 ㄴ 것입니다. 겹치는 목록의 경우,이 과정은 처음부터 끝까지 반복되는 요소가 발견 될 때까지 a, b, 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의 첫 번째 요소에서 멈 춥니 다.
// 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가 아닌 A의 첫번째 요소를 정지 B를 반복한다.
"공유 값"을 정의하십시오. "두리스트 모두 정확히 똑같은 사람들을 포함하고 있습니까?" –
나는 그가 일반적인 가치 (= 인터 섹트)를 가지고 있음을 의미한다고 믿는다. 필요한 방법 인 'Bool DoIntersect (..)'에서 얻을 수있다. –
예, 같은 이드의 사람들. 그러나 사실, 제 코드에는 버그가 있다고 생각합니다. 테스트 해 보도록하겠습니다. – lsibaja