この記事は機械翻訳されています。英語版の記事を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

Enumerable.Intersect<TSource> メソッド (IEnumerable<TSource>, IEnumerable<TSource>)

 

公開日: 2016年10月

値を比較する既定の等値比較子を使用して、2 つのシーケンスの積集合を生成します。

名前空間:   System.Linq
アセンブリ:  System.Core (System.Core.dll 内)

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

パラメーター

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

IEnumerable<T>にも表示される一意の要素を持つsecondが返されます。

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

IEnumerable<T>最初のシーケンスにも表示される一意の要素が返されます。

戻り値

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

2 つのシーケンスの積集合を構成する要素が格納されているシーケンス。

型パラメーター

TSource

入力シーケンスの要素の型。

Exception Condition
ArgumentNullException

first または secondnull です。

このメソッドは遅延実行を使用して実装されます。 即時の戻り値は、操作を実行するために必要なすべての情報を格納するオブジェクトです。 オブジェクトのいずれかを呼び出したが列挙されるまで、このメソッドで表されるクエリが実行されていませんが、GetEnumeratorメソッド直接、またはを使用してforeachでVisual C#またはFor EachでVisual Basicです。

2 つのセット A と B の積集合は、A、B にも表示されるのすべての要素ではないその他の要素を含むセットとして定義されます。

このメソッドによって返されるオブジェクトを列挙すると、Intersect<TSource>に現れる順序で両方のシーケンスで発生する一意の要素を生成firstです。

既定の等値比較子Default、実装する型の値を比較するために使用、IEqualityComparer<T>ジェネリック インターフェイス。 カスタム データ型を比較する必要がありますをこのインターフェイスを実装し、独自GetHashCodeEqualsの型のメソッドです。

次のコード例を使用する方法を示していますIntersect<TSource>(IEnumerable<TSource>, IEnumerable<TSource>)を整数の 2 つのシーケンスの各で表示される要素を返します。

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;
    }
}

このインターフェイスを実装した後のシーケンスを使用することができますProductA内のオブジェクト、Intersect<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 first array 
// that have duplicates in the second array.

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

ユニバーサル Windows プラットフォーム
8 以降で使用可能
.NET Framework
3.5 以降で使用可能
ポータブル クラス ライブラリ
サポート対象: 移植可能 .NET プラットフォーム
Silverlight
2.0 以降で使用可能
Windows Phone Silverlight
7.0 以降で使用可能
Windows Phone
8.1 以降で使用可能
トップに戻る
表示: