本文章是由機器翻譯。 將指標移到文章內的文字上方即可查看原文。 其他資訊。
譯文
原文
資訊
The topic you requested is included in another documentation set. For convenience, it's displayed below. Choose Switch to see the topic in its original location.

Enumerable.Intersect<TSource> 方法 (IEnumerable<TSource>, IEnumerable<TSource>)

使用預設相等比較子來比較值,以便產生兩個序列的交集。

命名空間:  System.Linq
組件:  System.Core (在 System.Core.dll 中)

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

類型參數

TSource

輸入序列的項目之型別。

參數

first
類型:System.Collections.Generic.IEnumerable<TSource>
傳回其獨特項目同時出現在 second 中的 IEnumerable<T>
second
類型:System.Collections.Generic.IEnumerable<TSource>
傳回其獨特項目同時出現在第一個序列中的 IEnumerable<T>

傳回值

類型:System.Collections.Generic.IEnumerable<TSource>
序列,其中包含形成兩個序列之交集的項目。

使用注意事項

在 Visual Basic 和 C# 中,您可以在任何 IEnumerable<TSource> 類型物件中呼叫這個方法以做為執行個體。使用執行個體方法語法呼叫這個方法時,請省略第一個參數。如需詳細資訊,請參閱擴充方法 (Visual Basic)擴充方法 (C# 程式設計手冊)

例外狀況條件
ArgumentNullException

firstsecondnull

這個方法是利用延遲執行所實作。 立即傳回值是一個物件,儲存執行該動作所需的所有資訊。 這個方法所代表的查詢必須等到列舉物件 (透過直接呼叫其 GetEnumerator 方法,或是使用 Visual C# 中的 foreach 或 Visual Basic 中的 For Each) 之後才會執行。

A 和 B 兩個集合的交集是定義成包含在 A 並同時出現在 B 的所有項目,不包括其他任何項目。

列舉此方法所傳回的物件時,Intersect 會列舉 first,以收集該序列的所有獨特項目。 接著它會列舉 second,並標記同時出現在兩個序列中的項目。 最後再按照收集的順序來產生標記的項目。

預設相等比較子 Default 會用來比較實作 IEqualityComparer<T> 泛型介面的型別值。 若要比較自訂資料型別,您必須實作這個介面,並為型別提供您自己的 GetHashCodeEquals 方法。

下列程式碼範例示範如何使用 Intersect<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) 傳回出現在兩個整數序列中的項目。


            int[] id1 = { 44, 26, 92, 30, 71, 38 };
            int[] id2 = { 39, 59, 83, 47, 26, 4, 30 };

            IEnumerable<int> both = id1.Intersect(id2);

            foreach (int id in both)
                Console.WriteLine(id);

            /*
             This code produces the following output:

             26
             30
            */



如果想比較自訂資料型別的物件序列,您必須在協助類別中實作 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;
    }
}


實作這個介面後,您就可以如下列範例所示在 Intersect 方法中使用 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 first array 
// that have duplicates in the second array.

IEnumerable<ProductA> duplicates =
    store1.Intersect(store2);

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

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


.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 系統需求

社群新增項目

顯示:
© 2015 Microsoft