HashSet<T> Konstruktorer

Definition

Initierar en ny instans av HashSet<T> klassen.

Överlagringar

Name Description
HashSet<T>()

Initierar en ny instans av HashSet<T> klassen som är tom och använder standardjämförlikningsjämföraren för den angivna typen.

HashSet<T>(IEnumerable<T>)

Initierar en ny instans av HashSet<T> klassen som använder standardjämlikhetsjämföraren för den angivna typen, innehåller element som kopierats från den angivna samlingen och har tillräcklig kapacitet för att hantera antalet kopierade element.

HashSet<T>(IEqualityComparer<T>)

Initierar en ny instans av HashSet<T> klassen som är tom och använder den angivna likhetsjämföraren för den angivna typen.

HashSet<T>(Int32)

Initierar en ny instans av HashSet<T> klassen som är tom, men har reserverat utrymme för capacity objekt och använder standardjämförlikningsjämföraren för den angivna typen.

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

Initierar en ny instans av HashSet<T> klassen som använder den angivna likhetsjämföraren för den angivna typen, innehåller element som kopierats från den angivna samlingen och har tillräcklig kapacitet för att hantera antalet kopierade element.

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

Initierar en ny instans av HashSet<T> klassen som använder den angivna likhetsjämföraren för den angivna typen och har tillräckligt med kapacitet för element capacity .

HashSet<T>(SerializationInfo, StreamingContext)

Initierar en ny instans av HashSet<T> klassen med serialiserade data.

HashSet<T>()

Initierar en ny instans av HashSet<T> klassen som är tom och använder standardjämförlikningsjämföraren för den angivna typen.

public:
 HashSet();
public HashSet();
Public Sub New ()

Exempel

I följande exempel visas hur du skapar och fyller i två HashSet<T> objekt. Det här exemplet är en del av ett större exempel för UnionWith metoden.

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);
}
let evenNumbers = HashSet<int>()
let oddNumbers = HashSet<int>()

for i = 0 to 4 do
    // Populate numbers with just even numbers.
    evenNumbers.Add(i * 2) |> ignore

    // Populate oddNumbers with just odd numbers.
    oddNumbers.Add(i * 2 + 1) |> ignore
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

Kommentarer

Kapaciteten för ett HashSet<T> objekt är antalet element som objektet kan innehålla. Ett HashSet<T> objekts kapacitet ökar automatiskt när element läggs till i objektet.

Den här konstruktorn är en O(1)-åtgärd.

Gäller för

HashSet<T>(IEnumerable<T>)

Initierar en ny instans av HashSet<T> klassen som använder standardjämlikhetsjämföraren för den angivna typen, innehåller element som kopierats från den angivna samlingen och har tillräcklig kapacitet för att hantera antalet kopierade element.

public:
 HashSet(System::Collections::Generic::IEnumerable<T> ^ collection);
public HashSet(System.Collections.Generic.IEnumerable<T> collection);
new System.Collections.Generic.HashSet<'T> : seq<'T> -> System.Collections.Generic.HashSet<'T>
Public Sub New (collection As IEnumerable(Of T))

Parametrar

collection
IEnumerable<T>

Samlingen vars element kopieras till den nya uppsättningen.

Undantag

collection är null.

Exempel

I följande exempel visas hur du skapar en HashSet<T> samling från en befintlig uppsättning. I det här exemplet skapas två uppsättningar med jämna eller udda heltal. Ett tredje HashSet<T> objekt skapas sedan från den jämna heltalsuppsättningen.

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> collection)
{
    Console.Write("{");
    foreach (int i in collection)
    {
        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 }
*/

let displaySet (collection: HashSet<int>) =
    printf "{"

    for i in collection do
        printf $" {i}"

    printfn " }"

let evenNumbers = HashSet<int>()
let oddNumbers = HashSet<int>()

for i = 0 to 4 do
    // Populate numbers with just even numbers.
    evenNumbers.Add(i * 2) |> ignore

    // Populate oddNumbers with just odd numbers.
    oddNumbers.Add(i * 2 + 1) |> ignore

printf $"evenNumbers contains {evenNumbers.Count} elements: "
displaySet evenNumbers

printf $"oddNumbers contains {oddNumbers.Count} elements: "
displaySet oddNumbers

// Create a new HashSet populated with even numbers.
let numbers = HashSet<int> evenNumbers
printfn "numbers UnionWith oddNumbers..."
numbers.UnionWith oddNumbers

printf $"numbers contains {numbers.Count} elements: "
displaySet numbers
// 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 }
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

Kommentarer

Kapaciteten för ett HashSet<T> objekt är antalet element som objektet kan innehålla. Ett HashSet<T> objekts kapacitet ökar automatiskt när element läggs till i objektet.

Om collection innehåller dubbletter innehåller uppsättningen ett av varje unikt element. Inget undantag utlöses. Därför är storleken på den resulterande uppsättningen inte identisk med storleken på collection.

Den här konstruktorn är en O(n)-åtgärd, där n är antalet element i parametern collection .

Gäller för

HashSet<T>(IEqualityComparer<T>)

Initierar en ny instans av HashSet<T> klassen som är tom och använder den angivna likhetsjämföraren för den angivna typen.

public:
 HashSet(System::Collections::Generic::IEqualityComparer<T> ^ comparer);
public HashSet(System.Collections.Generic.IEqualityComparer<T> comparer);
new System.Collections.Generic.HashSet<'T> : System.Collections.Generic.IEqualityComparer<'T> -> System.Collections.Generic.HashSet<'T>
Public Sub New (comparer As IEqualityComparer(Of T))

Parametrar

comparer
IEqualityComparer<T>

Den IEqualityComparer<T> implementering som ska användas vid jämförelse av värden i uppsättningen eller null för att använda standardimplementeringen EqualityComparer<T> för den angivna typen.

Kommentarer

Kapaciteten för ett HashSet<T> objekt är antalet element som objektet kan innehålla. Ett HashSet<T> objekts kapacitet ökar automatiskt när element läggs till i objektet.

Den här konstruktorn är en O(1)-åtgärd.

Gäller för

HashSet<T>(Int32)

Initierar en ny instans av HashSet<T> klassen som är tom, men har reserverat utrymme för capacity objekt och använder standardjämförlikningsjämföraren för den angivna typen.

public:
 HashSet(int capacity);
public HashSet(int capacity);
new System.Collections.Generic.HashSet<'T> : int -> System.Collections.Generic.HashSet<'T>
Public Sub New (capacity As Integer)

Parametrar

capacity
Int32

Den ursprungliga storleken på HashSet<T>.

Kommentarer

Eftersom storleksändringen är relativt dyr (kräver omhashing) försöker detta minimera behovet av att ändra storlek genom att ange den ursprungliga kapaciteten baserat på värdet för capacity.

Caution

Om capacity det kommer från användarindata föredrar du att använda en konstruktoröverlagring utan parameter capacity och låter samlingen ändra storlek när element läggs till. Om du måste använda ett användarangivet värde kan du antingen klämma fast det till en rimlig gräns (till exempel Math.Clamp(untrustedValue, 0, 20)), eller kontrollera att elementantalet matchar det angivna värdet.

Gäller för

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

Initierar en ny instans av HashSet<T> klassen som använder den angivna likhetsjämföraren för den angivna typen, innehåller element som kopierats från den angivna samlingen och har tillräcklig kapacitet för att hantera antalet kopierade element.

public:
 HashSet(System::Collections::Generic::IEnumerable<T> ^ collection, System::Collections::Generic::IEqualityComparer<T> ^ comparer);
public HashSet(System.Collections.Generic.IEnumerable<T> collection, System.Collections.Generic.IEqualityComparer<T> comparer);
new System.Collections.Generic.HashSet<'T> : seq<'T> * System.Collections.Generic.IEqualityComparer<'T> -> System.Collections.Generic.HashSet<'T>
Public Sub New (collection As IEnumerable(Of T), comparer As IEqualityComparer(Of T))

Parametrar

collection
IEnumerable<T>

Samlingen vars element kopieras till den nya uppsättningen.

comparer
IEqualityComparer<T>

Den IEqualityComparer<T> implementering som ska användas vid jämförelse av värden i uppsättningen eller null för att använda standardimplementeringen EqualityComparer<T> för den angivna typen.

Undantag

collection är null.

Exempel

I följande exempel används en angiven IEqualityComparer<T> för att tillåta skiftlägesokänsliga jämförelser av elementen i en HashSet<T> samling fordonstyper.

HashSet<string> allVehicles = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
List<string> someVehicles = new List<string>();

someVehicles.Add("Planes");
someVehicles.Add("Trains");
someVehicles.Add("Automobiles");

// Add in the vehicles contained in the someVehicles list.
allVehicles.UnionWith(someVehicles);

Console.WriteLine("The current HashSet contains:\n");
foreach (string vehicle in allVehicles)
{
    Console.WriteLine(vehicle);
}

allVehicles.Add("Ships");
allVehicles.Add("Motorcycles");
allVehicles.Add("Rockets");
allVehicles.Add("Helicopters");
allVehicles.Add("Submarines");

Console.WriteLine("\nThe updated HashSet contains:\n");
foreach (string vehicle in allVehicles)
{
    Console.WriteLine(vehicle);
}

// Verify that the 'All Vehicles' set contains at least the vehicles in
// the 'Some Vehicles' list.
if (allVehicles.IsSupersetOf(someVehicles))
{
    Console.Write("\nThe 'All' vehicles set contains everything in ");
    Console.WriteLine("'Some' vechicles list.");
}

// Check for Rockets. Here the OrdinalIgnoreCase comparer will compare
// true for the mixed-case vehicle type.
if (allVehicles.Contains("roCKeTs"))
{
    Console.WriteLine("\nThe 'All' vehicles set contains 'roCKeTs'");
}

allVehicles.ExceptWith(someVehicles);
Console.WriteLine("\nThe excepted HashSet contains:\n");
foreach (string vehicle in allVehicles)
{
    Console.WriteLine(vehicle);
}

// Remove all the vehicles that are not 'super cool'.
allVehicles.RemoveWhere(isNotSuperCool);

Console.WriteLine("\nThe super cool vehicles are:\n");
foreach (string vehicle in allVehicles)
{
    Console.WriteLine(vehicle);
}

// Predicate to determine vehicle 'coolness'.
bool isNotSuperCool(string vehicle)
{
    bool superCool = (vehicle == "Helicopters") || (vehicle == "Motorcycles");

    return !superCool;
}

// The program writes the following output to the console.
//
// The current HashSet contains:
//
// Planes
// Trains
// Automobiles
//
// The updated HashSet contains:
//
// Planes
// Trains
// Automobiles
// Ships
// Motorcycles
// Rockets
// Helicopters
// Submarines
//
// The 'All' vehicles set contains everything in 'Some' vechicles list.
//
// The 'All' vehicles set contains 'roCKeTs'
//
// The excepted HashSet contains:
//
// Ships
// Motorcycles
// Rockets
// Helicopters
// Submarines
//
// The super cool vehicles are:
//
// Motorcycles
// Helicopters
let allVehicles = HashSet<string> StringComparer.OrdinalIgnoreCase
let someVehicles = ResizeArray()

someVehicles.Add "Planes"
someVehicles.Add "Trains"
someVehicles.Add "Automobiles"

// Add in the vehicles contained in the someVehicles list.
allVehicles.UnionWith someVehicles

printfn "The current HashSet contains:\n"

for vehicle in allVehicles do
    printfn $"{vehicle}"

allVehicles.Add "Ships" |> ignore
allVehicles.Add "Motorcycles" |> ignore
allVehicles.Add "Rockets" |> ignore
allVehicles.Add "Helicopters" |> ignore
allVehicles.Add "Submarines" |> ignore

printfn "\nThe updated HashSet contains:\n"

for vehicle in allVehicles do
    printfn $"{vehicle}"

// Verify that the 'All Vehicles' set contains at least the vehicles in
// the 'Some Vehicles' list.
if allVehicles.IsSupersetOf someVehicles then
    printfn "\nThe 'All' vehicles set contains everything in 'Some' vehicles list."

// Check for Rockets. Here the OrdinalIgnoreCase comparer will compare
// true for the mixed-case vehicle type.
if allVehicles.Contains "roCKeTs" then
    printfn "\nThe 'All' vehicles set contains 'roCKeTs'"

allVehicles.ExceptWith someVehicles
printfn "\nThe excepted HashSet contains:\n"

for vehicle in allVehicles do
    printfn $"{vehicle}"

// Predicate to determine vehicle 'coolness'.
let isNotSuperCool vehicle =
    let superCool = vehicle = "Helicopters" || vehicle = "Motorcycles"
    not superCool

// Remove all the vehicles that are not 'super cool'.
allVehicles.RemoveWhere isNotSuperCool |> ignore

printfn "\nThe super cool vehicles are:\n"

for vehicle in allVehicles do
    printfn $"{vehicle}"

// The program writes the following output to the console.
//
// The current HashSet contains:
//
// Planes
// Trains
// Automobiles
//
// The updated HashSet contains:
//
// Planes
// Trains
// Automobiles
// Ships
// Motorcycles
// Rockets
// Helicopters
// Submarines
//
// The 'All' vehicles set contains everything in 'Some' vehicles list.
//
// The 'All' vehicles set contains 'roCKeTs'
//
// The excepted HashSet contains:
//
// Ships
// Motorcycles
// Rockets
// Helicopters
// Submarines
//
// The super cool vehicles are:
//
// Motorcycles
// Helicopters
Imports System.Collections.Generic

Class Program
    Public Shared Sub Main()
        Dim allVehicles As New HashSet(Of String)(StringComparer.OrdinalIgnoreCase)
        Dim someVehicles As New List(Of String)()

        someVehicles.Add("Planes")
        someVehicles.Add("Trains")
        someVehicles.Add("Automobiles")

        ' Add in the vehicles contained in the someVehicles list.
        allVehicles.UnionWith(someVehicles)

        Console.WriteLine("The current HashSet contains:" + Environment.NewLine)
        For Each vehicle As String In allVehicles
            Console.WriteLine(vehicle)
        Next vehicle

        allVehicles.Add("Ships")
        allVehicles.Add("Motorcycles")
        allVehicles.Add("Rockets")
        allVehicles.Add("Helicopters")
        allVehicles.Add("Submarines")

        Console.WriteLine(Environment.NewLine + "The updated HashSet contains:" + Environment.NewLine)
        For Each vehicle As String In allVehicles
            Console.WriteLine(vehicle)
        Next vehicle

        ' Verify that the 'All Vehicles' set contains at least the vehicles in
        ' the 'Some Vehicles' list.
        If allVehicles.IsSupersetOf(someVehicles) Then
            Console.Write(Environment.NewLine + "The 'All' vehicles set contains everything in ")
            Console.WriteLine("'Some' vechicles list.")
        End If

        ' Check for Rockets. Here the OrdinalIgnoreCase comparer will compare
        ' True for the mixed-case vehicle type.
        If allVehicles.Contains("roCKeTs") Then
            Console.WriteLine(Environment.NewLine + "The 'All' vehicles set contains 'roCKeTs'")
        End If

        allVehicles.ExceptWith(someVehicles)
        Console.WriteLine(Environment.NewLine + "The excepted HashSet contains:" + Environment.NewLine)
        For Each vehicle As String In allVehicles
            Console.WriteLine(vehicle)
        Next vehicle

        ' Remove all the vehicles that are not 'super cool'.
        allVehicles.RemoveWhere(AddressOf isNotSuperCool)

        Console.WriteLine(Environment.NewLine + "The super cool vehicles are:" + Environment.NewLine)
        For Each vehicle As String In allVehicles
            Console.WriteLine(vehicle)
        Next vehicle
    End Sub

    ' Predicate to determine vehicle 'coolness'.
    Private Shared Function isNotSuperCool(vehicle As String) As Boolean
        Dim notSuperCool As Boolean = _
            (vehicle <> "Helicopters") And (vehicle <> "Motorcycles")

        Return notSuperCool
    End Function
End Class

'
' The program writes the following output to the console.
'
' The current HashSet contains:
'
' Planes
' Trains
' Automobiles
'
' The updated HashSet contains:
'
' Planes
' Trains
' Automobiles
' Ships
' Motorcycles
' Rockets
' Helicopters
' Submarines
'
' The 'All' vehicles set contains everything in 'Some' vechicles list.
'
' The 'All' vehicles set contains 'roCKeTs'
'
' The excepted HashSet contains:
'
' Ships
' Motorcycles
' Rockets
' Helicopters
' Submarines
'
' The super cool vehicles are:
'
' Motorcycles
' Helicopters

Kommentarer

Kapaciteten för ett HashSet<T> objekt är antalet element som objektet kan innehålla. Ett HashSet<T> objekts kapacitet ökar automatiskt när element läggs till i objektet.

Om collection innehåller dubbletter innehåller uppsättningen ett av varje unikt element. Inget undantag utlöses. Därför är storleken på den resulterande uppsättningen inte identisk med storleken på collection.

Den här konstruktorn är en O(n)-åtgärd, där n är antalet element i parametern collection .

Gäller för

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

Initierar en ny instans av HashSet<T> klassen som använder den angivna likhetsjämföraren för den angivna typen och har tillräckligt med kapacitet för element capacity .

public:
 HashSet(int capacity, System::Collections::Generic::IEqualityComparer<T> ^ comparer);
public HashSet(int capacity, System.Collections.Generic.IEqualityComparer<T> comparer);
new System.Collections.Generic.HashSet<'T> : int * System.Collections.Generic.IEqualityComparer<'T> -> System.Collections.Generic.HashSet<'T>
Public Sub New (capacity As Integer, comparer As IEqualityComparer(Of T))

Parametrar

capacity
Int32

Den ursprungliga storleken på HashSet<T>.

comparer
IEqualityComparer<T>

Implementeringen IEqualityComparer<T> som ska användas vid jämförelse av värden i uppsättningen eller null (Ingenting i Visual Basic) för att använda standardimplementeringen IEqualityComparer<T> för den angivna typen.

Kommentarer

Eftersom storleksändringen är relativt dyr (kräver omhashing) försöker detta minimera behovet av att ändra storlek genom att ange den ursprungliga kapaciteten baserat på värdet för capacity.

Caution

Om capacity det kommer från användarindata föredrar du att använda en konstruktoröverlagring utan parameter capacity och låter samlingen ändra storlek när element läggs till. Om du måste använda ett användarangivet värde kan du antingen klämma fast det till en rimlig gräns (till exempel Math.Clamp(untrustedValue, 0, 20)), eller kontrollera att elementantalet matchar det angivna värdet.

Gäller för

HashSet<T>(SerializationInfo, StreamingContext)

Initierar en ny instans av HashSet<T> klassen med serialiserade data.

protected:
 HashSet(System::Runtime::Serialization::SerializationInfo ^ info, System::Runtime::Serialization::StreamingContext context);
protected HashSet(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context);
new System.Collections.Generic.HashSet<'T> : System.Runtime.Serialization.SerializationInfo * System.Runtime.Serialization.StreamingContext -> System.Collections.Generic.HashSet<'T>
Protected Sub New (info As SerializationInfo, context As StreamingContext)

Parametrar

info
SerializationInfo

Ett SerializationInfo objekt som innehåller den information som krävs för att serialisera objektet HashSet<T> .

context
StreamingContext

En StreamingContext struktur som innehåller källan och målet för den serialiserade ström som är associerad med HashSet<T> objektet.

Kommentarer

Den här konstruktorn anropas under deserialiseringen för att återskapa ett objekt som överförs över en ström. Mer information finns i XML- och SOAP-serialisering.

Gäller för