HashSet<T> Clase

Definición

Representa un conjunto de valores.Represents a set of values.

generic <typename T>
public ref class HashSet : 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
[System.Serializable]
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
type HashSet<'T> = class
    interface ICollection<'T>
    interface ISerializable
    interface IDeserializationCallback
    interface ISet<'T>
    interface IReadOnlyCollection<'T>
    interface seq<'T>
    interface IEnumerable
Public Class HashSet(Of T)
Implements ICollection(Of T), IDeserializationCallback, IEnumerable(Of T), IReadOnlyCollection(Of T), ISerializable, ISet(Of T)

Parámetros de tipo

T

Tipo de los elementos del conjunto hash.The type of elements in the hash set.

Herencia
HashSet<T>
Atributos
Implementaciones

Ejemplos

En el ejemplo siguiente se muestra cómo combinar dos conjuntos dispares.The following example demonstrates how to merge two disparate sets. En este ejemplo se crean dos objetos HashSet<T> y se rellenan con números pares e impares, respectivamente.This example creates two HashSet<T> objects, and populates them with even and odd numbers, respectively. Se crea un tercer objeto HashSet<T> a partir del conjunto que contiene los números pares.A third HashSet<T> object is created from the set that contains the even numbers. A continuación, en el ejemplo se llama al método UnionWith, que agrega el número impar al tercer conjunto.The example then calls the UnionWith method, which adds the odd number set to the third set.

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

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

Comentarios

La clase HashSet<T> proporciona operaciones de conjunto de alto rendimiento.The HashSet<T> class provides high-performance set operations. Un conjunto es una colección que no contiene elementos duplicados y cuyos elementos no están en ningún orden determinado.A set is a collection that contains no duplicate elements, and whose elements are in no particular order.

Nota

HashSet<T> implementa la interfaz IReadOnlyCollection<T> a partir de la .NET Framework 4.6.NET Framework 4.6; en versiones anteriores del .NET Framework, la clase HashSet<T> no implementaba esta interfaz.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.

La capacidad de un objeto HashSet<T> es el número de elementos que puede contener el objeto.The capacity of a HashSet<T> object is the number of elements that the object can hold. La capacidad de un objeto HashSet<T> aumenta automáticamente a medida que se agregan elementos al objeto.A HashSet<T> object's capacity automatically increases as elements are added to the object.

La clase HashSet<T> se basa en el modelo de conjuntos matemáticos y proporciona operaciones de conjunto de alto rendimiento similares al acceso a las claves de las colecciones Dictionary<TKey,TValue> o 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. En términos simples, la clase HashSet<T> puede considerarse como una colección Dictionary<TKey,TValue> sin valores.In simple terms, the HashSet<T> class can be thought of as a Dictionary<TKey,TValue> collection without values.

Una colección HashSet<T> no está ordenada y no puede contener elementos duplicados.A HashSet<T> collection is not sorted and cannot contain duplicate elements. Si el orden o la duplicación de elementos es más importante que el rendimiento de la aplicación, considere la posibilidad de usar la clase List<T> junto con el método 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> proporciona muchas operaciones de conjuntos matemáticos, como la suma de conjuntos (uniones) y la resta de conjuntos.HashSet<T> provides many mathematical set operations, such as set addition (unions) and set subtraction. En la tabla siguiente se enumeran las operaciones HashSet<T> proporcionadas y sus equivalentes matemáticos.The following table lists the provided HashSet<T> operations and their mathematical equivalents.

Operación HashSetHashSet operation Equivalente matemáticoMathematical equivalent
UnionWith Unión o suma de conjuntosUnion or set addition
IntersectWith IntersecciónIntersection
ExceptWith Establecer restaSet subtraction
SymmetricExceptWith Diferencia simétricaSymmetric difference

Además de las operaciones de conjunto enumeradas, la clase HashSet<T> también proporciona métodos para determinar la igualdad de conjuntos, la superposición de conjuntos y si un conjunto es un subconjunto o un supraconjunto de otro conjunto.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.

Solo .NET Framework: En el caso de los objetos HashSet<T> muy grandes, puede aumentar la capacidad máxima a 2 mil millones elementos en un sistema de 64 bits estableciendo el atributo enabled del elemento de configuración <gcAllowVeryLargeObjects> en true en el entorno de tiempo de ejecución..NET Framework only: 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 <gcAllowVeryLargeObjects> configuration element to true in the run-time environment.

A partir de .NET Framework 4.NET Framework 4, la clase HashSet<T> implementa la interfaz ISet<T>.Starting with the .NET Framework 4.NET Framework 4, the HashSet<T> class implements the ISet<T> interface.

Operaciones HashSet y Set de LINQHashSet and LINQ Set Operations

LINQ proporciona acceso a las operaciones de conjuntos Distinct, Union, Intersect y Except en cualquier origen de datos que implemente las interfaces IEnumerable o 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> proporciona una colección mayor y más sólida de operaciones Set.HashSet<T> provides a larger and more robust collection of set operations. Por ejemplo, HashSet<T> proporciona comparaciones como IsSubsetOf y IsSupersetOf.For example, HashSet<T> provides comparisons such as IsSubsetOf and IsSupersetOf.

La principal diferencia entre las operaciones Set de LINQ y las operaciones HashSet<T> es que las operaciones Set de LINQ siempre devuelven una nueva colección IEnumerable<T>, mientras que los métodos equivalentes de HashSet<T> modifican la colección actual.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.

Normalmente, si debe crear un nuevo conjunto o si la aplicación necesita acceso solo a las operaciones Set proporcionadas, el uso de las operaciones Set de LINQ en cualquier colección IEnumerable<T> será suficiente.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. Sin embargo, si la aplicación requiere acceso a operaciones de conjunto adicionales, o si no es deseable o necesario crear una nueva colección, use la clase 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.

En la tabla siguiente se muestran las operaciones HashSet<T> y las operaciones Set de LINQ equivalentes.The following table shows the HashSet<T> operations and their equivalent LINQ set operations.

Operación HashSetHashSet operation Equivalente de LINQLINQ equivalent
UnionWith Union
IntersectWith Intersect
ExceptWith Except
No se proporciona.Not provided. Distinct
SymmetricExceptWith No se proporciona.Not provided.
Overlaps No se proporciona.Not provided.
IsSubsetOf No se proporciona.Not provided.
IsProperSubsetOf No se proporciona.Not provided.
IsSupersetOf No se proporciona.Not provided.
IsProperSupersetOf No se proporciona.Not provided.
SetEquals No se proporciona.Not provided.

Constructores

HashSet<T>()

Inicializa una nueva instancia de la clase HashSet<T> que está vacía y utiliza el comparador de igualdad predeterminado para el tipo de conjunto.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>)

Inicializa una nueva instancia de la clase HashSet<T> que utiliza el comparador de igualdad predeterminado para el tipo de conjunto, contiene elementos copiados de la colección especificada y tiene capacidad suficiente para dar cabida al número de elementos copiados.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>)

Inicializa una nueva instancia de la clase HashSet<T> que utiliza el comparador de igualdad especificado para el tipo de conjunto, contiene elementos copiados de la colección especificada y tiene capacidad suficiente para alojar el número de elementos copiados.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>)

Inicializa una nueva instancia de la clase HashSet<T> que está vacía y utiliza el comparador de igualdad especificado para el tipo de conjunto.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)

Inicializa una nueva instancia de la clase HashSet<T> que está vacía, pero que tiene espacio reservado para los elementos capacity y usa el comparador de igualdad predeterminado para el tipo de conjunto.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>)

Inicializa una nueva instancia de la clase HashSet<T> que usa el comparador de igualdad especificado para el tipo de conjunto y que tiene capacidad suficiente para alojar elementos 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)

Inicializa una nueva instancia de la clase HashSet<T> con datos serializados.Initializes a new instance of the HashSet<T> class with serialized data.

Propiedades

Comparer

Obtiene el objeto IEqualityComparer<T> que se utiliza para determinar la igualdad de los valores del conjunto.Gets the IEqualityComparer<T> object that is used to determine equality for the values in the set.

Count

Obtiene el número de elementos contenidos en un conjunto.Gets the number of elements that are contained in a set.

Métodos

Add(T)

Agrega el elemento especificado a un conjunto.Adds the specified element to a set.

Clear()

Quita todos los elementos de un objeto HashSet<T>.Removes all elements from a HashSet<T> object.

Contains(T)

Determina si un objeto HashSet<T> contiene el elemento especificado.Determines whether a HashSet<T> object contains the specified element.

CopyTo(T[])

Copia los elementos de un objeto HashSet<T> en una matriz.Copies the elements of a HashSet<T> object to an array.

CopyTo(T[], Int32)

Copia los elementos de un objeto HashSet<T> en una matriz, comenzando en el índice especificado de la matriz.Copies the elements of a HashSet<T> object to an array, starting at the specified array index.

CopyTo(T[], Int32, Int32)

Copia el número de elementos especificado de un objeto HashSet<T> en una matriz, comenzando en el índice especificado de la matriz.Copies the specified number of elements of a HashSet<T> object to an array, starting at the specified array index.

CreateSetComparer()

Devuelve un objeto IEqualityComparer que se puede usar para comprobar la igualdad de un objeto HashSet<T>.Returns an IEqualityComparer object that can be used for equality testing of a HashSet<T> object.

EnsureCapacity(Int32)

Garantiza que este conjunto hash puede contener el número especificado de elementos sin aumentar.Ensures that this hash set can hold the specified number of elements without growing.

Equals(Object)

Determina si el objeto especificado es igual al objeto actual.Determines whether the specified object is equal to the current object.

(Heredado de Object)
ExceptWith(IEnumerable<T>)

Quita del objeto HashSet<T> actual todos los elementos de la colección especificada.Removes all elements in the specified collection from the current HashSet<T> object.

GetEnumerator()

Devuelve un enumerador que recorre en iteración un objeto HashSet<T>.Returns an enumerator that iterates through a HashSet<T> object.

GetHashCode()

Sirve como la función hash predeterminada.Serves as the default hash function.

(Heredado de Object)
GetObjectData(SerializationInfo, StreamingContext)

Implementa la interfaz ISerializable y devuelve los datos necesarios para serializar un objeto HashSet<T>.Implements the ISerializable interface and returns the data needed to serialize a HashSet<T> object.

GetType()

Obtiene el Type de la instancia actual.Gets the Type of the current instance.

(Heredado de Object)
IntersectWith(IEnumerable<T>)

Modifica el objeto HashSet<T> actual para que solo contenga elementos que están presentes en ese objeto y en la colección especificada.Modifies the current HashSet<T> object to contain only elements that are present in that object and in the specified collection.

IsProperSubsetOf(IEnumerable<T>)

Determina si un objeto HashSet<T> es un subconjunto apropiado de la colección especificada.Determines whether a HashSet<T> object is a proper subset of the specified collection.

IsProperSupersetOf(IEnumerable<T>)

Determina si un objeto HashSet<T> es un supraconjunto apropiado de la colección especificada.Determines whether a HashSet<T> object is a proper superset of the specified collection.

IsSubsetOf(IEnumerable<T>)

Determina si un objeto HashSet<T> es un subconjunto de la colección especificada.Determines whether a HashSet<T> object is a subset of the specified collection.

IsSupersetOf(IEnumerable<T>)

Determina si un objeto HashSet<T> es un supraconjunto de la colección especificada.Determines whether a HashSet<T> object is a superset of the specified collection.

MemberwiseClone()

Crea una copia superficial del objeto Object actual.Creates a shallow copy of the current Object.

(Heredado de Object)
OnDeserialization(Object)

Implementa la interfaz ISerializable y genera el evento de deserialización cuando esta ha finalizado.Implements the ISerializable interface and raises the deserialization event when the deserialization is complete.

Overlaps(IEnumerable<T>)

Determina si el objeto HashSet<T> actual y una colección especificada comparten elementos comunes.Determines whether the current HashSet<T> object and a specified collection share common elements.

Remove(T)

Quita el elemento especificado de un objeto HashSet<T>.Removes the specified element from a HashSet<T> object.

RemoveWhere(Predicate<T>)

Quita todos los elementos que cumplen las condiciones definidas por el predicado especificado de una colección HashSet<T>.Removes all elements that match the conditions defined by the specified predicate from a HashSet<T> collection.

SetEquals(IEnumerable<T>)

Determina si un objeto HashSet<T> y la colección especificada contienen los mismos elementos.Determines whether a HashSet<T> object and the specified collection contain the same elements.

SymmetricExceptWith(IEnumerable<T>)

Modifica el objeto HashSet<T> actual para que contenga únicamente los elementos que están presentes en ese objeto o en la colección especificada, pero no en ambos.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()

Devuelve una cadena que representa el objeto actual.Returns a string that represents the current object.

(Heredado de Object)
TrimExcess()

Establece la capacidad de un objeto HashSet<T> en el número real de elementos que contiene, redondeado a un valor próximo específico de la implementación.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)

Busca en el conjunto un valor determinado y devuelve un valor igual al que encuentra, si encuentra alguno.Searches the set for a given value and returns the equal value it finds, if any.

UnionWith(IEnumerable<T>)

Modifica el objeto HashSet<T> actual para que contenga todos los elementos que están presentes en él y en la colección especificada o en ambos.Modifies the current HashSet<T> object to contain all elements that are present in itself, the specified collection, or both.

Implementaciones de interfaz explícitas

ICollection<T>.Add(T)

Agrega un elemento a un objeto ICollection<T>.Adds an item to an ICollection<T> object.

ICollection<T>.IsReadOnly

Obtiene un valor que indica si una colección es de sólo lectura.Gets a value indicating whether a collection is read-only.

IEnumerable.GetEnumerator()

Devuelve un enumerador que recorre en iteración una colección.Returns an enumerator that iterates through a collection.

IEnumerable<T>.GetEnumerator()

Devuelve un enumerador que recorre en iteración una colección.Returns an enumerator that iterates through a collection.

Métodos de extensión

CopyToDataTable<T>(IEnumerable<T>)

Devuelve un objeto DataTable que contiene copias de los objetos DataRow, dado un objeto IEnumerable<T> de entrada donde el parámetro T genérico es DataRow.Returns a DataTable that contains copies of the DataRow objects, given an input IEnumerable<T> object where the generic parameter T is DataRow.

CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption)

Copia objetos DataRow en el objeto DataTable especificado, dado un objeto IEnumerable<T> de entrada donde el parámetro T genérico es DataRow.Copies DataRow objects to the specified DataTable, given an input IEnumerable<T> object where the generic parameter T is DataRow.

CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption, FillErrorEventHandler)

Copia objetos DataRow en el objeto DataTable especificado, dado un objeto IEnumerable<T> de entrada donde el parámetro T genérico es DataRow.Copies DataRow objects to the specified DataTable, given an input IEnumerable<T> object where the generic parameter T is DataRow.

Cast<TResult>(IEnumerable)

Convierte los elementos de IEnumerable en el tipo especificado.Casts the elements of an IEnumerable to the specified type.

OfType<TResult>(IEnumerable)

Filtra los elementos de IEnumerable en función de un tipo especificado.Filters the elements of an IEnumerable based on a specified type.

AsParallel(IEnumerable)

Habilita la paralelización de una consulta.Enables parallelization of a query.

AsQueryable(IEnumerable)

Convierte una interfaz IEnumerable en IQueryable.Converts an IEnumerable to an IQueryable.

Ancestors<T>(IEnumerable<T>)

Devuelve una colección de elementos que contiene los antecesores de todos los nodos de la colección de origen.Returns a collection of elements that contains the ancestors of every node in the source collection.

Ancestors<T>(IEnumerable<T>, XName)

Devuelve una colección de elementos filtrada que contiene los antecesores de todos los nodos de la colección de origen.Returns a filtered collection of elements that contains the ancestors of every node in the source collection. En la colección sólo se incluyen los elementos que tienen un objeto XName coincidente.Only elements that have a matching XName are included in the collection.

DescendantNodes<T>(IEnumerable<T>)

Devuelve una colección de los nodos descendientes de todos los documentos y elementos de la colección de origen.Returns a collection of the descendant nodes of every document and element in the source collection.

Descendants<T>(IEnumerable<T>)

Devuelve una colección de elementos que contiene los elementos descendientes de todos los elementos y documentos de la colección de origen.Returns a collection of elements that contains the descendant elements of every element and document in the source collection.

Descendants<T>(IEnumerable<T>, XName)

Devuelve una colección filtrada de elementos que contiene los elementos descendientes de todos los elementos y documentos de la colección de origen.Returns a filtered collection of elements that contains the descendant elements of every element and document in the source collection. En la colección sólo se incluyen los elementos que tienen un objeto XName coincidente.Only elements that have a matching XName are included in the collection.

Elements<T>(IEnumerable<T>)

Devuelve una colección de los elementos secundarios de todos los elementos y documentos de la colección de origen.Returns a collection of the child elements of every element and document in the source collection.

Elements<T>(IEnumerable<T>, XName)

Devuelve una colección filtrada de los elementos secundarios de todos los elementos y documentos de la colección de origen.Returns a filtered collection of the child elements of every element and document in the source collection. En la colección sólo se incluyen los elementos que tienen un objeto XName coincidente.Only elements that have a matching XName are included in the collection.

InDocumentOrder<T>(IEnumerable<T>)

Devuelve una colección de nodos que contiene todos los nodos de la colección de origen, clasificados por documento.Returns a collection of nodes that contains all nodes in the source collection, sorted in document order.

Nodes<T>(IEnumerable<T>)

Devuelve una colección de los nodos secundarios de todos los documentos y elementos de la colección de origen.Returns a collection of the child nodes of every document and element in the source collection.

Remove<T>(IEnumerable<T>)

Quita todos los nodos de la colección de origen de su nodo primario.Removes every node in the source collection from its parent node.

Se aplica a

Consulte también: