반응형
Linq [duplicate]를 사용하여 시퀀스에 다른 시퀀스의 모든 요소가 포함되어 있는지 확인
이 질문에 이미 답변이 있습니다.
- 배열이 다른 8 개 답변 의 하위 집합인지 확인
두 세트의 값이 주어집니다.
var subset = new[] { 2, 4, 6, 8 };
var superset = new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
의 superset
모든 요소가 포함되어 있는지 어떻게 확인 subset
합니까?
나는 이것을 생각 해냈다 :
superset.Intersect(subset).Count() == subset.Count()
이것이 가장 논리적이고 효율적인 방법입니까?
카운트? Not Any는 어떻습니까?
bool contained = !subset.Except(superset).Any();
그래서 내 다른 대답은 사용하기가 매우 쉽습니다. 그러나 그것은 O (n * m) 솔루션입니다.
다음은 약간 덜 친숙한 O (n + m) 솔루션입니다. 수퍼 세트가 HUGE 인 경우 사용해야합니다. 반복적으로 수퍼 세트를 열거하지 않습니다.
HashSet<int> hashSet = new HashSet<int>(superset);
bool contained = subset.All(i => hashSet.Contains(i));
기존 Contains () 메서드를 사용하는 확장 메서드가 있습니다. Instersect () 또는 Except ()를 사용하는 것보다 더 직관적입니다.
public static bool ContainsAll<T>(this IEnumerable<T> source, IEnumerable<T> values)
{
return values.All(value => source.Contains(value));
}
Except를 사용할 수 있으며 결과 개수는 0이어야합니다.
매개 변수에 대한 자세한 내용은 MSDN을 참조하십시오.
예:
subset.Except(superset).Count() == 0
반응형
'program story' 카테고리의 다른 글
종속 자식 이미지가있는 Docker 이미지를 삭제할 수 없습니다. (0) | 2020.08.16 |
---|---|
Active Directory를 통해 LDAP를 사용하여 PHP에서 인증 (0) | 2020.08.16 |
Google 크롬 인쇄 페이지 나누기 (0) | 2020.08.16 |
'source'속성을 'org.eclipse.jst.jee.server : JSFTut'로 설정하면 일치하는 속성을 찾지 못했습니다. (0) | 2020.08.16 |
emacs에서 활성 부 모드를 어떻게 나열합니까? (0) | 2020.08.15 |