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

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

 

公開日: 2016年10月

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

名前空間:   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> 和集合の 2 番目のセットを形成する異なる要素を格納します。

戻り値

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>) を整数の 2 つのシーケンスの和集合を取得します。

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 以降で使用可能
トップに戻る
表示: