내보내기(0) 인쇄
모두 확장
이 문서는 기계로 번역한 것입니다. 원본 텍스트를 보려면 포인터를 문서의 문장 위로 올리십시오. 추가 정보
번역
원본

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

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

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

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

형식 매개 변수

TSource

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

매개 변수

first
형식: System.Collections.Generic.IEnumerable<TSource>
해당 고유 요소가 합집합의 첫 번째 집합을 이루는 IEnumerable<T>입니다.
second
형식: System.Collections.Generic.IEnumerable<TSource>
해당 고유 요소가 합집합의 두 번째 집합을 이루는 IEnumerable<T>입니다.

반환 값

형식: System.Collections.Generic.IEnumerable<TSource>
두 입력 시퀀스의 모든 요소가 들어 있는 IEnumerable<T>이며, 중복 요소는 제외됩니다.

사용 정보

Visual Basic 및 C#에서는 이 메서드를 IEnumerable<TSource> 형식의 모든 개체에서 인스턴스 메서드로 호출할 수 있습니다. 인스턴스 메서드 구문을 사용하여 이 메서드를 호출할 경우에는 첫 번째 매개 변수를 생략합니다. 자세한 내용은 확장 메서드(Visual Basic) 또는 확장 메서드(C# 프로그래밍 가이드)를 참조하십시오.

예외조건
ArgumentNullException

first 또는 secondnull인 경우

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

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

기본 동등성 비교자인 DefaultIEqualityComparer<T> 제네릭 인터페이스를 구현하는 형식 값들을 비교하는 데 사용됩니다. 사용자 지정 데이터 형식을 비교하려면, 이 인터페이스를 구축하고 형식에 대한 본인의 GetHashCodeEquals 메서드를 제공해야 합니다.

이 메서드가 반환하는 개체를 열거하면 Union에서 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> 제네릭 인터페이스를 구현해야 합니다. 다음 코드 예제에서는 사용자 지정 데이터 형식에서 이 인터페이스를 어떻게 구현하고 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;
    }
}


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


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
*/


.NET Framework

4.5.2, 4.5.1, 4.5, 4, 3.5에서 지원

.NET Framework Client Profile

4, 3.5 SP1에서 지원

이식 가능한 클래스 라이브러리

이식 가능한 클래스 라이브러리에서 지원

Windows 스토어 앱용 .NET

Windows 8에서 지원

Windows Phone 앱용 .NET

Windows Phone 8, Silverlight 8.1에서 지원

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008(서버 코어 역할은 지원되지 않음), Windows Server 2008 R2(서버 코어 역할은 SP1 이상에서 지원, Itanium은 지원되지 않음)

.NET Framework에서 모든 플랫폼의 전체 버전을 지원하지는 않습니다. 지원되는 버전의 목록을 보려면 .NET Framework 시스템 요구 사항을 참조하십시오.

커뮤니티 추가 항목

추가
표시:
© 2014 Microsoft