2011-01-25 2 views
3

:추가 배열이 작업을 수행하는 가장 빠른 방법은 무엇

var firstArray = Enumerable.Range(1, 10).ToArray(); // 1,2,3,4,5,6,7,8,9,10 
var secondArray = Enumerable.Range(9, 3).ToArray(); //     9,10,11,12 
var thirdArray = Enumerable.Range(2, 3).ToArray(); // 2,3,4,5 
//add these arrays expected output would be   1,2,3,4,5,6,7,8,9,10,11,12 

이 할 수있는 LINQ의 방법이있다. 반복 할 배열의 목록이 꽤 있습니다. 또 다른 예

var firstArray = Enumerable.Range(1, 10).ToArray(); // 1,2,3,4,5,6,7,8,9,10 
var secondArray = Enumerable.Range(12, 1).ToArray(); //      12,13 
//add these arrays expected output would be   1,2,3,4,5,6,7,8,9,10,12,13 

참고 : 나는 날짜 범위에서 작동 할 기능을 선호합니다.

+0

비슷한 문제가 여기에 : http://stackoverflow.com/questions/3325810/how-to-compare-list-of-x-to-list-of-y-in-c-by-using- generics –

답변

8

.Union은 다양한 순서의 고유 한 조합을 제공합니다. 참고 : 맞춤 유형으로 작업하는 경우 클래스 내에 GetHashCode/Equals에 대한 우선 적용을 제공하거나 과부하로 유형에 IEqualityComparer<T>을 제공해야합니다. int 또는 DateTime과 같은 BCL 유형의 경우에는 문제가 없습니다.

예 :

var sequence = Enumerable.Range(0,10).Union(Enumerable.Range(5,10)); 
// should result in sequence of 0 through 14, no repeats 

편집

하나의 명령에 모두 체인없이 조합에 우아한 방법 내 모든 범위를 하겠는가. 시퀀스는 시퀀스가 ​​있다면

, 그 목록의 컬렉션 아마도 가변 배열 될 경우 Distinct과 함께 SelectMany 방법을 사용할 수있다.

int[][] numberArrays = new int[3][]; 
numberArrays[0] = new int[] { 1, 2, 3, 4, 5 }; 
numberArrays[1] = new int[] { 3, 4, 5, 6, 7 }; 
numberArrays[2] = new int[] { 2, 4, 6, 8, 10 }; 

var allUniqueNumbers = numberArrays.SelectMany(i => i).Distinct(); 

그렇지 않으면이 문제를 처리 할 수있는 고유 한 확장 방법을 만드는 것이 좋습니다.

public static class MyExtensions 
{ 
    public static IEnumerable<T> UnionMany<T>(this IEnumerable<T> sequence, params IEnumerable<T>[] others) 
    { 
     return sequence.Union(others.SelectMany(i => i)); 
    } 
} 

// 

var allUniques = numberArrays[0].UnionMany(numberArrays[1], numberArrays[2]); 
+0

하나의 명령으로 모든 범위를 연결하지 않고 모든 범위를 통합하는 가장 좋은 방법은 무엇입니까? –

+0

@geocine, 업데이트를 참조하십시오. –

+0

마지막으로, 목록은 어떻습니까 ? –