HashSet<T> Class

定義

値のセットを表します。 Represents a set of values.

public class HashSet<T> : System.Collections.Generic.ICollection<T>, System.Collections.Generic.IEnumerable<T>, System.Collections.Generic.IReadOnlyCollection<T>, System.Collections.Generic.ISet<T>, System.Runtime.Serialization.IDeserializationCallback, System.Runtime.Serialization.ISerializable
型パラメーター
T

ハッシュ セット内の要素の型。 The type of elements in the hash set.

継承
HashSet<T>
実装

次の例では、2 つの異なるセットをマージする方法を示します。The following example demonstrates how to merge two disparate sets. この例では、2 つ作成されますHashSet<T>オブジェクト、し、それぞれ偶数と奇数の数値、それらを設定します。This example creates two HashSet<T> objects, and populates them with even and odd numbers, respectively. 3 番目HashSet<T>の偶数を含むセットからオブジェクトを作成します。A third HashSet<T> object is created from the set that contains the even numbers. 例を呼び出して、UnionWithメソッドは、3 番目のセットに奇数の数値のセットを追加します。The example then calls the UnionWith method, which adds the odd number set to the third set.

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        HashSet<int> evenNumbers = new HashSet<int>();
        HashSet<int> oddNumbers = new HashSet<int>();

        for (int i = 0; i < 5; i++)
        {
            // Populate numbers with just even numbers.
            evenNumbers.Add(i * 2);

            // Populate oddNumbers with just odd numbers.
            oddNumbers.Add((i * 2) + 1);
        }

        Console.Write("evenNumbers contains {0} elements: ", evenNumbers.Count);
        DisplaySet(evenNumbers);

        Console.Write("oddNumbers contains {0} elements: ", oddNumbers.Count);
        DisplaySet(oddNumbers);

        // Create a new HashSet populated with even numbers.
        HashSet<int> numbers = new HashSet<int>(evenNumbers);
        Console.WriteLine("numbers UnionWith oddNumbers...");
        numbers.UnionWith(oddNumbers);

        Console.Write("numbers contains {0} elements: ", numbers.Count);
        DisplaySet(numbers);

    }

    private static void DisplaySet(HashSet<int> set)
    {
        Console.Write("{");
        foreach (int i in set)
        {
            Console.Write(" {0}", i);
        }
        Console.WriteLine(" }");
    }
}
/* This example produces output similar to the following:
 * evenNumbers contains 5 elements: { 0 2 4 6 8 }
 * oddNumbers contains 5 elements: { 1 3 5 7 9 }
 * numbers UnionWith oddNumbers...
 * numbers contains 10 elements: { 0 2 4 6 8 1 3 5 7 9 }
 */
Imports System
Imports System.Collections.Generic

Class Program

    Shared Sub Main()

        Dim evenNumbers As HashSet(Of Integer) = New HashSet(Of Integer)()
        Dim oddNumbers As HashSet(Of Integer) = New HashSet(Of Integer)()

        For i As Integer = 0 To 4

            ' Populate evenNumbers with only even numbers.
            evenNumbers.Add(i * 2)

            ' Populate oddNumbers with only odd numbers.
            oddNumbers.Add((i * 2) + 1)
        Next i

        Console.Write("evenNumbers contains {0} elements: ", evenNumbers.Count)
        DisplaySet(evenNumbers)

        Console.Write("oddNumbers contains {0} elements: ", oddNumbers.Count)
        DisplaySet(oddNumbers)

        ' Create a new HashSet populated with even numbers.
        Dim numbers As HashSet(Of Integer) = New HashSet(Of Integer)(evenNumbers)
        Console.WriteLine("numbers UnionWith oddNumbers...")
        numbers.UnionWith(oddNumbers)

        Console.Write("numbers contains {0} elements: ", numbers.Count)
        DisplaySet(numbers)
    End Sub


    Private Shared Sub DisplaySet(ByVal coll As HashSet(Of Integer))
        Console.Write("{")
        For Each i As Integer In coll
            Console.Write(" {0}", i)
        Next i
        Console.WriteLine(" }")
    End Sub

End Class
' This example produces output similar to the following:
' evenNumbers contains 5 elements: { 0 2 4 6 8 }
' oddNumbers contains 5 elements: { 1 3 5 7 9 }
' numbers UnionWith oddNumbers...
' numbers contains 10 elements: { 0 2 4 6 8 1 3 5 7 9 }

注釈

HashSet<T>セット操作で高パフォーマンス クラスを提供します。The HashSet<T> class provides high-performance set operations. セットは、重複する要素が含まれていないコレクションと要素が特定の順序はありません。A set is a collection that contains no duplicate elements, and whose elements are in no particular order.

注意

HashSet<T> 実装して、IReadOnlyCollection<T>インターフェイス以降では、 .NET Framework 4.6.NET Framework 4.6、.NET Framework の以前のバージョンでは、HashSet<T>クラスは、このインターフェイスを実装しませんでした。HashSet<T> implements the IReadOnlyCollection<T> interface starting with the .NET Framework 4.6.NET Framework 4.6; in previous versions of the .NET Framework, the HashSet<T> class did not implement this interface.

容量をHashSet<T>オブジェクトは、オブジェクトが保持できる要素の数。The capacity of a HashSet<T> object is the number of elements that the object can hold. AHashSet<T>オブジェクトに要素が追加されるオブジェクトの容量が自動的に増加します。A HashSet<T> object's capacity automatically increases as elements are added to the object.

HashSet<T>クラスは、数学的なセットのモデルに基づいており、操作をセットのキーにアクセスするような高パフォーマンスを提供、Dictionary<TKey,TValue>またはHashtableコレクション。The HashSet<T> class is based on the model of mathematical sets and provides high-performance set operations similar to accessing the keys of the Dictionary<TKey,TValue> or Hashtable collections. 簡単に言えば、HashSet<T>クラスとして考えることができます、Dictionary<TKey,TValue>なしの値のコレクション。In simple terms, the HashSet<T> class can be thought of as a Dictionary<TKey,TValue> collection without values.

AHashSet<T>コレクションが並べ替えられていないと、重複する要素を含めることはできません。A HashSet<T> collection is not sorted and cannot contain duplicate elements. 順序または要素の重複が、アプリケーションのパフォーマンスがより重要な場合は、使用を検討して、List<T>クラスと組み合わせて、Sortメソッド。If order or element duplication is more important than performance for your application, consider using the List<T> class together with the Sort method.

HashSet<T> 多く数学的なセットの追加 (共用体) などの操作を設定し、減算の設定を提供します。HashSet<T> provides many mathematical set operations, such as set addition (unions) and set subtraction. 次の表に、指定された一覧HashSet<T>操作と、対応する数値。The following table lists the provided HashSet<T> operations and their mathematical equivalents.

HashSet (Of T) の操作HashSet(Of T) operation 数学的に相当Mathematical equivalent
UnionWith 共用体であるか、または設定の追加Union or set addition
IntersectWith 積集合Intersection
ExceptWith セットの減算Set subtraction
SymmetricExceptWith 対称差Symmetric difference

表示されているセットの操作だけでなく、HashSet<T>クラスでは、セットの等値をセットの重複を判断するためのメソッドも用意されてセットは、サブセットまたは別のセットのスーパー セットであるかどうかとします。In addition to the listed set operations, the HashSet<T> class also provides methods for determining set equality, overlap of sets, and whether a set is a subset or superset of another set.

非常に大きなHashSet<T>オブジェクトを設定して、64 ビット システム上の 20億要素に最大容量を増やすことができます、enabledする構成要素の属性true実行時環境でします。For very large HashSet<T> objects, you can increase the maximum capacity to 2 billion elements on a 64-bit system by setting the enabled attribute of the configuration element to true in the run-time environment.

以降では、 .NET Framework 4.NET Framework 4HashSet<T>クラスが実装する、ISet<T>インターフェイス。Starting with the .NET Framework 4.NET Framework 4, the HashSet<T> class implements the ISet<T> interface.

HashSet 操作と LINQ セット操作HashSet and LINQ Set Operations

LINQ へのアクセスを提供する、 DistinctUnionIntersectExceptを実装する任意のデータ ソースに対する操作の設定、IEnumerableまたはIQueryableインターフェイス。LINQ provides access to the Distinct, Union, Intersect and Except set operations on any data source that implements the IEnumerable or IQueryable interfaces. HashSet<T> セット操作の大きいとより堅牢なコレクションを提供します。HashSet<T> provides a larger and more robust collection of set operations. たとえば、HashSet<T>などの比較を提供します。IsSubsetOfIsSupersetOfします。For example, HashSet<T> provides comparisons such as IsSubsetOf and IsSupersetOf.

LINQ の主な違いは、操作を設定およびHashSet<T>操作は、LINQ セット操作が、新しい返す常に、IEnumerable<T>コレクション、一方、HashSet<T>の同等のメソッドは、現在のコレクションを変更します。The primary difference between LINQ set operations and HashSet<T> operations is that LINQ set operations always return a new IEnumerable<T> collection, whereas the HashSet<T> equivalent methods modify the current collection.

通常、新しいセットを作成する必要があります、アプリケーションには、指定されたセットの操作にのみアクセスが必要な場合や、LINQ を使用して設定でいずれかの操作IEnumerable<T>コレクションまたは配列を十分になります。Typically, if you must create a new set or if your application needs access only to the provided set operations, using LINQ set operations on any IEnumerable<T> collection or array will be sufficient. ただし、アプリケーションには、一連の追加操作へのアクセスが必要な場合、または望ましい、または新しいコレクションを作成するために必要でない場合は、使用、HashSet<T>クラス。However, if your application requires access to additional set operations, or if it is not desirable or necessary to create a new collection, use the HashSet<T> class.

次の表は、HashSet<T>操作と、同等の LINQ セット操作。The following table shows the HashSet<T> operations and their equivalent LINQ set operations.

HashSet (Of T) の操作HashSet(Of T) operation LINQ と同等LINQ equivalent
UnionWith Union
IntersectWith Intersect
ExceptWith Except
指定されていません。Not provided. Distinct
SymmetricExceptWith 指定されていません。Not provided.
Overlaps 指定されていません。Not provided.
IsSubsetOf 指定されていません。Not provided.
IsProperSubsetOf 指定されていません。Not provided.
IsSupersetOf 指定されていません。Not provided.
IsProperSupersetOf 指定されていません。Not provided.
SetEquals 指定されていません。Not provided.

コンストラクター

HashSet<T>()

HashSet<T> クラスの新しいインスタンスを初期化します。初期化後のインスタンスの内容は空です。このセット型には既定の等値比較子が使用されます。 Initializes a new instance of the HashSet<T> class that is empty and uses the default equality comparer for the set type.

HashSet<T>(IEnumerable<T>)

HashSet<T> クラスの新しいインスタンスを初期化します。このセット型には既定の等値比較子が使用されます。指定されたコレクションからコピーされた要素が格納され、コピー対象の要素数を格納できるだけの十分な容量が確保されます。 Initializes a new instance of the HashSet<T> class that uses the default equality comparer for the set type, contains elements copied from the specified collection, and has sufficient capacity to accommodate the number of elements copied.

HashSet<T>(IEnumerable<T>, IEqualityComparer<T>)

HashSet<T> クラスの新しいインスタンスを初期化します。このセット型には指定した等値比較子が使用されます。指定されたコレクションからコピーされた要素が格納され、コピー対象の要素数を格納できるだけの十分な容量が確保されます。 Initializes a new instance of the HashSet<T> class that uses the specified equality comparer for the set type, contains elements copied from the specified collection, and has sufficient capacity to accommodate the number of elements copied.

HashSet<T>(IEqualityComparer<T>)

HashSet<T> クラスの新しいインスタンスを初期化します。初期化後のインスタンスの内容は空です。このセット型には指定した等値比較子が使用されます。 Initializes a new instance of the HashSet<T> class that is empty and uses the specified equality comparer for the set type.

HashSet<T>(Int32)

HashSet<T> クラスの新しいインスタンスを初期化します。初期化後のインスタンスの内容は空ですが、capacity 項目の予約された領域があり、このセット型には既定の等値比較子が使用されます。 Initializes a new instance of the HashSet<T> class that is empty, but has reserved space for capacity items and uses the default equality comparer for the set type.

HashSet<T>(Int32, IEqualityComparer<T>)

HashSet<T> クラスの新しいインスタンスを初期化します。このセット型には指定した等値比較子が使用されます。また、capacity 要素を格納できるだけの容量を備えています。 Initializes a new instance of the HashSet<T> class that uses the specified equality comparer for the set type, and has sufficient capacity to accommodate capacity elements.

HashSet<T>(SerializationInfo, StreamingContext)

シリアル化したデータを使用して、HashSet<T> クラスの新しいインスタンスを初期化します。 Initializes a new instance of the HashSet<T> class with serialized data.

プロパティ

Comparer

セット内の値が等しいかどうかを確認するために使用する IEqualityComparer<T> オブジェクトを取得します。 Gets the IEqualityComparer<T> object that is used to determine equality for the values in the set.

Count

セットに格納されている要素の数を取得します。 Gets the number of elements that are contained in a set.

方法

Add(T)

指定された要素をセットに追加します。 Adds the specified element to a set.

Clear()

HashSet<T> オブジェクトからすべての要素を削除します。 Removes all elements from a HashSet<T> object.

Contains(T)

指定した要素が HashSet<T> オブジェクトに含まれているかどうかを判断します。 Determines whether a HashSet<T> object contains the specified element.

CopyTo(T[])

HashSet<T> オブジェクトの要素を配列にコピーします。 Copies the elements of a HashSet<T> object to an array.

CopyTo(T[], Int32)

指定された配列インデックスを開始位置として、HashSet<T> オブジェクトの要素を配列にコピーします。 Copies the elements of a HashSet<T> object to an array, starting at the specified array index.

CopyTo(T[], Int32, Int32)

指定された配列インデックスを開始位置として、HashSet<T> オブジェクトから、指定された数の要素を配列にコピーします。 Copies the specified number of elements of a HashSet<T> object to an array, starting at the specified array index.

CreateSetComparer()

HashSet<T> オブジェクトの等価テストに使用できる IEqualityComparer オブジェクトを返します。 Returns an IEqualityComparer object that can be used for equality testing of a HashSet<T> object.

EnsureCapacity(Int32)
Equals(Object)

指定したオブジェクトが、現在のオブジェクトと等しいかどうかを判断します。 Determines whether the specified object is equal to the current object.

(Inherited from Object)
ExceptWith(IEnumerable<T>)

現在の HashSet<T> オブジェクトから、指定されたコレクションに含まれる要素をすべて削除します。 Removes all elements in the specified collection from the current HashSet<T> object.

GetEnumerator()

HashSet<T> オブジェクトを反復処理する列挙子を返します。 Returns an enumerator that iterates through a HashSet<T> object.

GetHashCode()

既定のハッシュ関数として機能します。 Serves as the default hash function.

(Inherited from Object)
GetObjectData(SerializationInfo, StreamingContext)

ISerializable インターフェイスを実装し、HashSet<T> オブジェクトをシリアル化するために必要なデータを返します。 Implements the ISerializable interface and returns the data needed to serialize a HashSet<T> object.

GetType()

現在のインスタンスの Type を取得します。 Gets the Type of the current instance.

(Inherited from Object)
IntersectWith(IEnumerable<T>)

現在の HashSet<T> オブジェクトを、そのオブジェクトと指定されたコレクションの両方に存在する要素だけが格納されるように変更します。 Modifies the current HashSet<T> object to contain only elements that are present in that object and in the specified collection.

IsProperSubsetOf(IEnumerable<T>)

HashSet<T> オブジェクトが、指定されたコレクションの真のサブセット (真部分集合) であるかどうかを判断します。 Determines whether a HashSet<T> object is a proper subset of the specified collection.

IsProperSupersetOf(IEnumerable<T>)

HashSet<T> オブジェクトが、指定されたコレクションの真のスーパーセット (真上位集合) であるかどうかを判断します。 Determines whether a HashSet<T> object is a proper superset of the specified collection.

IsSubsetOf(IEnumerable<T>)

HashSet<T> オブジェクトが、指定されたコレクションのサブセットであるかどうかを判断します。 Determines whether a HashSet<T> object is a subset of the specified collection.

IsSupersetOf(IEnumerable<T>)

HashSet<T> オブジェクトが、指定されたコレクションのスーパーセットであるかどうかを判断します。 Determines whether a HashSet<T> object is a superset of the specified collection.

MemberwiseClone()

現在の Object の簡易コピーを作成します。 Creates a shallow copy of the current Object.

(Inherited from Object)
OnDeserialization(Object)

ISerializable インターフェイスを実装し、逆シリアル化が完了したときに逆シリアル化イベントを発生させます。 Implements the ISerializable interface and raises the deserialization event when the deserialization is complete.

Overlaps(IEnumerable<T>)

現在の HashSet<T> オブジェクトと指定されたコレクションとが共通の要素を共有しているかどうかを判断します。 Determines whether the current HashSet<T> object and a specified collection share common elements.

Remove(T)

HashSet<T> オブジェクトから指定された要素を削除します。 Removes the specified element from a HashSet<T> object.

RemoveWhere(Predicate<T>)

指定の述語によって定義された条件に一致するすべての要素を HashSet<T> コレクションから削除します。 Removes all elements that match the conditions defined by the specified predicate from a HashSet<T> collection.

SetEquals(IEnumerable<T>)

HashSet<T> オブジェクトと指定されたコレクションに同じ要素が存在するかどうかを判断します。 Determines whether a HashSet<T> object and the specified collection contain the same elements.

SymmetricExceptWith(IEnumerable<T>)

現在の HashSet<T> オブジェクトを、そのオブジェクトと指定されたコレクションの (両方に存在するのではなく) どちらか一方に存在する要素だけが格納されるように変更します。 Modifies the current HashSet<T> object to contain only elements that are present either in that object or in the specified collection, but not both.

ToString()

現在のオブジェクトを表す文字列を返します。 Returns a string that represents the current object.

(Inherited from Object)
TrimExcess()

HashSet<T> オブジェクトの容量を、そこに格納されている実際の要素数を最も近い実装に固有の値に切り上げて設定します。 Sets the capacity of a HashSet<T> object to the actual number of elements it contains, rounded up to a nearby, implementation-specific value.

TryGetValue(T, T)

指定された値をセットで検索し、見つかった場合は同じ値を返します。 Searches the set for a given value and returns the equal value it finds, if any.

UnionWith(IEnumerable<T>)

現在の HashSet<T> オブジェクトに変更を加えて、そのオブジェクト自体、指定されたコレクション、またはそれら両方に存在するすべての要素を格納するようにします。 Modifies the current HashSet<T> object to contain all elements that are present in itself, the specified collection, or both.

明示的なインターフェイスの実装

ICollection<T>.Add(T)

ICollection<T> オブジェクトに項目を追加します。 Adds an item to an ICollection<T> object.

ICollection<T>.IsReadOnly

コレクションが読み取り専用かどうかを示す値を取得します。 Gets a value indicating whether a collection is read-only.

IEnumerable.GetEnumerator()

コレクションを反復処理する列挙子を返します。 Returns an enumerator that iterates through a collection.

IEnumerable<T>.GetEnumerator()

コレクションを反復処理する列挙子を返します。 Returns an enumerator that iterates through a collection.

適用対象

こちらもご覧ください