이 문서는 기계 번역을 이용하여 번역되었습니다. 문서를 영문으로 보려면 영문 확인란을 선택하세요. 마우스 포인터를 텍스트 위로 이동시켜 팝업 창에서 영문 텍스트를 표시할 수도 있습니다.
번역
영문

Enumerable.Union<TSource> 메서드 (IEnumerable<TSource>, IEnumerable<TSource>)

 

게시 날짜: 2016년 11월

기본 같음 비교자를 사용 하 여 두 시퀀스의 합집합을 구합니다.

네임스페이스:   System.Linq
어셈블리:  System.Core(System.Core.dll에 있음)

public static IEnumerable<TSource> Union<TSource>(
	this IEnumerable<TSource> first,
	IEnumerable<TSource> second
)

매개 변수

first
Type: System.Collections.Generic.IEnumerable<TSource>

IEnumerable<T> 해당 고유 요소가 합집합에 대 한 첫 번째 집합을 형성 합니다.

second
Type: System.Collections.Generic.IEnumerable<TSource>

IEnumerable<T> 해당 고유 요소가 합집합에 대 한 두 번째 집합을 형성 합니다.

반환 값

Type: System.Collections.Generic.IEnumerable<TSource>

IEnumerable<T> 중복 제외 두 입력된 시퀀스에서 요소를 포함 하 합니다.

형식 매개 변수

TSource

입력 시퀀스 요소의 형식입니다.

Exception Condition
ArgumentNullException

first 또는 secondnull인 경우

이 메서드는 지연 된 실행을 사용 하 여 구현 됩니다. 즉시 반환 값은 작업을 수행 하는 데 필요한 모든 정보를 저장 하는 개체입니다. 이 방법으로 나타내는 쿼리 호출 개체가 열거 될 때까지 실행 되지 않습니다 해당 GetEnumerator 메서드를 사용 하 여 직접 또는 foreach 에서 Visual C# 또는 For Each 에 Visual Basic합니다.

이 메서드는 반환 집합에서 중복 요소를 제외 합니다. 이 서로 다른 동작을는 Concat<TSource> 메서드를 중복 항목을 포함 하 여 입력된 시퀀스의 모든 요소를 반환 합니다.

기본 같음 비교자 Default, 를 구현 하는 형식의 값을 비교 하는 데 사용 되는 IEqualityComparer<T> 제네릭 인터페이스입니다. 사용자 지정 데이터 형식을 비교 하려면이 인터페이스를 구현 하 고 제공 고유한 GetHashCodeEquals 유형에 대 한 방법입니다.

이 메서드에서 반환 되는 개체를 열거 하면 Union<TSource> 열거 firstsecond 를 순서 대로 생성 하지 이미 각 요소를 생성 합니다.

다음 코드 예제에 사용 하는 방법을 보여 줍니다 Union<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) 두 정수 시퀀스의 합집합을 얻을 수 있습니다.

int[] ints1 = { 5, 3, 9, 7, 5, 9, 3, 7 };
int[] ints2 = { 8, 3, 6, 4, 4, 9, 1, 0 };

IEnumerable<int> union = ints1.Union(ints2);

foreach (int num in union)
{
    Console.Write("{0} ", num);
}

/*
 This code produces the following output:

 5 3 9 7 8 6 4 1 0
*/

구현 해야 하는 사용자 지정 데이터 형식 개체의 시퀀스를 비교 하려는 경우는 IEqualityComparer<T> 제네릭 인터페이스는 helperclass에 있습니다. 다음 코드 예제에서는 사용자 지정 데이터 형식에이 인터페이스를 구현 하 고 제공 하는 방법을 보여 줍니다. GetHashCodeEquals 메서드.

public class ProductA
{ 
    public string Name { get; set; }
    public int Code { get; set; }
}

public class ProductComparer : IEqualityComparer<ProductA>
{

    public bool Equals(ProductA x, ProductA y)
    {
        //Check whether the objects are the same object. 
        if (Object.ReferenceEquals(x, y)) return true;

        //Check whether the products' properties are equal. 
        return x != null && y != null && x.Code.Equals(y.Code) && x.Name.Equals(y.Name);
    }

    public int GetHashCode(ProductA obj)
    {
        //Get hash code for the Name field if it is not null. 
        int hashProductName = obj.Name == null ? 0 : obj.Name.GetHashCode();

        //Get hash code for the Code field. 
        int hashProductCode = obj.Code.GetHashCode();

        //Calculate the hash code for the product. 
        return hashProductName ^ hashProductCode;
    }
}

이 인터페이스를 구현한 후 시퀀스를 사용할 수 있습니다 ProductA 개체에 Union<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) 메서드를 다음 예와에서 같이 합니다.

ProductA[] store1 = { new ProductA { Name = "apple", Code = 9 }, 
                       new ProductA { Name = "orange", Code = 4 } };

ProductA[] store2 = { new ProductA { Name = "apple", Code = 9 }, 
                       new ProductA { Name = "lemon", Code = 12 } };
//Get the products from the both arrays
//excluding duplicates.

IEnumerable<ProductA> union =
  store1.Union(store2);

foreach (var product in union)
    Console.WriteLine(product.Name + " " + product.Code);

/*
    This code produces the following output:

    apple 9
    orange 4
    lemon 12
*/

유니버설 Windows 플랫폼
8 이후 사용 가능
.NET Framework
3.5 이후 사용 가능
이식 가능한 클래스 라이브러리
이식 가능한 .NET 플랫폼 에서 지원됨
Silverlight
2.0 이후 사용 가능
Windows Phone Silverlight
7.0 이후 사용 가능
Windows Phone
8.1 이후 사용 가능
맨 위로 이동
표시: