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

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

 

지정 된 사용 하 여 두 시퀀스의 교집합을 구합니다 IEqualityComparer<T> 값을 비교 합니다.

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

public static IEnumerable<TSource> Intersect<TSource>(
	this IEnumerable<TSource> first,
	IEnumerable<TSource> second,
	IEqualityComparer<TSource> comparer
)

매개 변수

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

IEnumerable<T> 도 있는 고유 요소가 second 반환 됩니다.

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

IEnumerable<T> 첫 번째 시퀀스에도 있는 고유 요소가 반환 됩니다.

comparer
Type: System.Collections.Generic.IEqualityComparer<TSource>

IEqualityComparer<T> 값을 비교 합니다.

반환 값

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

두 시퀀스의 교집합을 이루는 요소가 들어 있는 시퀀스입니다.

형식 매개 변수

TSource

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

Exception Condition
ArgumentNullException

first 또는 secondnull인 경우

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

A와 B에는 두 집합의 교집합 B에도 나타나는 A의 모든 요소가 있지만 다른 요소를 포함 하는 집합으로 정의 됩니다.

이 메서드에서 반환 되는 개체를 열거 하면 Intersect<TSource> 열거 first, 해당 시퀀스의 모든 고유 요소를 수집 합니다. 그런 다음 열거 second, 두 시퀀스에서 발생 하는 요소를 표시 합니다. 마지막으로 표시 된 요소는 이러한 수집 된 순서 대로 생성 됩니다.

Comparernull, 기본 같음 비교자 Default, 값을 비교 하는 데 사용 됩니다.

다음 예제에서 사용할 수 있는 같음 비교자를 구현 하는 방법을 Intersect<TSource> 메서드.

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

// Custom comparer for the Product class
class ProductComparer : IEqualityComparer<Product>
{
    // Products are equal if their names and product numbers are equal.
    public bool Equals(Product x, Product y)
    {

        //Check whether the compared objects reference the same data.
        if (Object.ReferenceEquals(x, y)) return true;

        //Check whether any of the compared objects is null.
        if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
            return false;

        //Check whether the products' properties are equal.
        return x.Code == y.Code && x.Name == y.Name;
    }

    // If Equals() returns true for a pair of objects 
    // then GetHashCode() must return the same value for these objects.

    public int GetHashCode(Product product)
    {
        //Check whether the object is null
        if (Object.ReferenceEquals(product, null)) return 0;

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

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

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

}

이 비교자를 구현한 후 시퀀스를 사용할 수 있습니다 Product 개체에 Intersect<TSource> 메서드를 다음 예와에서 같이 합니다.

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

Product[] store2 = { new Product { Name = "apple", Code = 9 }, 
                       new Product { Name = "lemon", Code = 12 } };
// Get the products from the first array 
// that have duplicates in the second array.

IEnumerable<Product> duplicates =
    store1.Intersect(store2, new ProductComparer());

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

/*
    This code produces the following output:
    apple 9
*/

Universal Windows Platform
8 이후에 사용 가능
.NET Framework
3.5 이후에 사용 가능
Portable Class Library
portable .NET platforms에서 지원 portable .NET platforms
Silverlight
2.0 이후에 사용 가능
Windows Phone Silverlight
7.0 이후에 사용 가능
Windows Phone
8.1 이후에 사용 가능
맨 위로 이동
표시: