2 개의 시퀀스가 있고 각각은 익명 형식을 2 개 필드 (x 및 y라고 함)로 반환합니다. 의미 상으로, x는 이러한 시퀀스의 키와 y 값을 제공합니다.두 Linq 시퀀스를 우선 순위로 병합하십시오.
동일한 x가 양쪽 모두에 나타나면 첫 번째 시퀀스가 두 번째 시퀀스보다 우선 순위가 높다는 것을 어떻게 지정하여 1 시퀀스로 병합 할 수 있습니까?
2 개의 시퀀스가 있고 각각은 익명 형식을 2 개 필드 (x 및 y라고 함)로 반환합니다. 의미 상으로, x는 이러한 시퀀스의 키와 y 값을 제공합니다.두 Linq 시퀀스를 우선 순위로 병합하십시오.
동일한 x가 양쪽 모두에 나타나면 첫 번째 시퀀스가 두 번째 시퀀스보다 우선 순위가 높다는 것을 어떻게 지정하여 1 시퀀스로 병합 할 수 있습니까?
당신은 쉽게 Linq를하지 않고 그것을 할 찾을 수 있습니다, 그러나 나는 이런 식으로 뭔가를 생각하고 있어요 :
var distinctWithPrecedence = seq1
.Concat(seq2)
.GroupBy(i => i.x)
.Select(g => g.First());
을 Linq에이 내부적으로 많이로하지 않는 경우. 기본 아이디어는 열쇠로 그룹화됩니다. 그런 다음 각 그룹에서 첫 번째 요소를 끌어 당깁니다. Linq가 어떻게 동작하는지 생각하면 첫 번째 요소가 연결된 목록의 첫 번째 요소가됩니다. 즉, 첫 번째 시퀀스가 선행한다는 의미입니다.
아마도 다른 방법이있을 수 있지만, 마음에 처음 나온 방법입니다.
내가
var res = seq1.Union(seq2, Comparer);
로 시작하는 것이지만, Enumerable.Union
에 대한 문서가 당신이 TSource
경우가 없습니다 IEqualityComparer<TSource>
의 구현으로 일치하는 요소가 촬영하고 Comparer
을 필요로하는 순서에서 지정하지 않은 익명 유형입니다 (하지만이를 허용할만한 가치가있을 수 있음). 그렇지 않으면
당신이 당신 자신의 도우미, 같은 것을 구현해야합니다 :
(당신이 당신의 자신의 종류 (특성 X & y)를 고수 할 경우, 단일 유형의 이상이 제네릭을 만들 수 있습니다 매개 변수를 사용하지만 별도의 속성에 대한 액세스 권한을 부여하려면 형식 제약 조건을 추가해야합니다.
완전성을 위해 'Union' *은 일치하는 요소가있는 경우'first'가 '우선'하도록 지정합니다 'second' : [Union은 * first *와 * second * **를이 순서대로 열거하고 이미 생성되지 않은 각 요소를 산출합니다.] (http://msdn.microsoft .com/ko-us/library/bb341731.aspx) – AakashM