當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


C# HashSet用法及代碼示例


HashSet<T> 是唯一元素的無序集合。它位於 System.Collections.Generic 命名空間下。它用於我們想要防止在集合中插入重複項的情況。就性能而言,與列表相比要好一些。

HashSet 類的特征:

  • 哈希集<T> 類提供高性能的集合操作。集合是不包含重複元素的集合,並且其元素沒有特定的順序。
  • HashSet的容量<T> object 是對象可以容納的元素數量。
  • 哈希集<T> 隨著向對象添加元素,對象的容量會自動增加。
  • 哈希集<T> 集合未排序且不能包含重複元素。
  • 哈希集<T> 提供許多數學集合運算,例如集合加法(並集)和集合減法。

Constructors

構造函數 說明
HashSet() 初始化 HashSet 類的新實例,該實例為空,並使用集合類型的默認相等比較器。
HashSet(IEnumerable) 初始化 HashSet 類的新實例,該實例使用集合類型的默認相等比較器,包含從指定集合複製的元素,並且具有足夠的容量來容納複製的元素數量。
HashSet(IEnumerable, IEqualityComparer) 初始化 HashSet 類的新實例,該實例使用集合類型的指定相等比較器,包含從指定集合複製的元素,並且具有足夠的容量來容納複製的元素數量。
HashSet(IEqualityComparer) 初始化 HashSet 類的一個新實例,該實例為空,並為集合類型使用指定的相等比較器。
哈希集(Int32) 初始化 HashSet 類的新實例,該實例為空,但為容量項保留了空間,並使用集合類型的默認相等比較器。
HashSet(Int32, IEqualityComparer) 初始化 HashSet 類的新實例,該實例使用集合類型的指定相等比較器,並具有足夠的容量來容納容量元素。
HashSet(SerializationInfo, StreamingContext) 使用序列化數據初始化 HashSet 類的新實例。

例子:


// C# code to create a HashSet 
using System; 
using System.Collections.Generic; 
  
class GFG { 
  
    // Driver code 
    public static void Main() 
    { 
  
        // Creating a HashSet of odd numbers 
        HashSet<int> odd = new HashSet<int>(); 
  
        // Inserting elements in HashSet 
        for (int i = 0; i < 5; i++) { 
            odd.Add(2 * i + 1); 
        } 
  
        // Displaying the elements in the HashSet 
        foreach(int i in odd) 
        { 
            Console.WriteLine(i); 
        } 
    } 
} 

輸出:

1
3
5
7
9

Properties

屬性 說明
Comparer 獲取 IEqualityComparer 對象,該對象用於確定集中值的相等性。
Count 獲取集合中包含的元素數。

例子:


// C# code to get the number of 
// elements that are contained in HashSet 
using System; 
using System.Collections.Generic; 
  
class GFG { 
  
    // Driver code 
    public static void Main() 
    { 
  
        // Creating a HashSet of integers 
        HashSet<int> mySet = new HashSet<int>(); 
  
        // Inserting elements in HashSet 
        for (int i = 0; i < 5; i++) { 
            mySet.Add(i * 2); 
        } 
  
        // To get the number of 
        // elements that are contained in HashSet 
        Console.WriteLine(mySet.Count); 
    } 
} 

輸出:

5

Methods

方法 說明
Add(T) 將指定元素添加到集合中。
Clear() 從 HashSet 對象中刪除所有元素。
Contains(T) 確定HashSet對象是否包含指定元素。
CopyTo() 將 HashSet 集合的元素複製到數組中。
CreateSetComparer() 返回一個 IEqualityComparer 對象,該對象可用於 HashSet 對象的相等性測試。
Equals(Object) 確定指定對象是否等於當前對象。
ExceptWith(IEnumerable) 從當前 HashSet 對象中刪除指定集合中的所有元素。
GetEnumerator() 返回一個迭代 HashSet 對象的枚舉器。
GetHashCode() 用作默認的哈希函數。
GetObjectData(SerializationInfo, StreamingContext) 實現 ISerialized 接口並返回序列化 HashSet 對象所需的數據。
GetType() 獲取當前實例的類型。
IntersectWith(IEnumerable) 修改當前HashSet對象以僅包含該對象和指定集合中存在的元素。
IsProperSubsetOf(IEnumerable) 確定HashSet對象是否是指定集合的真子集。
IsProperSupersetOf(IEnumerable) 確定 HashSet 對象是否是指定集合的真超集。
IsSubsetOf(IEnumerable) 確定 HashSet 對象是否是指定集合的子集。
IsSupersetOf(IEnumerable) 確定 HashSet 對象是否是指定集合的超集。
MemberwiseClone() 創建當前對象的淺拷貝。
OnDeserialization(Object) 實現 ISerialized 接口並在反序列化完成時引發反序列化事件。
Overlaps(IEnumerable) 確定當前HashSet對象和指定集合是否共享公共元素。
Remove(T) 從 HashSet 對象中刪除指定元素。
RemoveWhere(Predicate) 從 HashSet 集合中刪除與指定謂詞定義的條件匹配的所有元素。
SetEquals(IEnumerable) 確定HashSet對象和指定集合是否包含相同的元素。
SymmetricExceptWith(IEnumerable) 修改當前HashSet對象以僅包含該對象或指定集合中存在的元素,但不能同時包含兩者中存在的元素。
ToString() 返回表示當前對象的字符串。
TrimExcess() 將 HashSet 對象的容量設置為其包含的實際元素數,四舍五入為附近的特定於實現的值。
TryGetValue(T, T) 在集合中搜索給定值並返回找到的相等值(如果有)。
UnionWith(IEnumerable) 修改當前HashSet對象以包含其自身、指定集合或兩者中存在的所有元素。

例子:


// C# code to Check if a HashSet is 
// a subset of the specified collection 
using System; 
using System.Collections.Generic; 
  
class GFG { 
  
    // Driver code 
    public static void Main() 
    { 
  
        // Creating a HashSet of integers 
        HashSet<int> mySet1 = new HashSet<int>(); 
  
        // Inserting elements in HashSet 
        // mySet1 only contains even numbers less than 
        // equal to 10 
        for (int i = 1; i <= 5; i++) 
            mySet1.Add(2 * i); 
  
        // Creating a HashSet of integers 
        HashSet<int> mySet2 = new HashSet<int>(); 
  
        // Inserting elements in HashSet 
        // mySet2 contains all numbers from 1 to 10 
        for (int i = 1; i <= 10; i++) 
            mySet2.Add(i); 
  
        // Check if a HashSet mySet1 is a subset 
        // of the HashSet mySet2 
        Console.WriteLine(mySet1.IsSubsetOf(mySet2)); 
    } 
} 

輸出:

True

例子:


// C# code to check if a HashSet 
// contains the specified element 
using System; 
using System.Collections.Generic; 
  
class GFG { 
  
    // Driver code 
    public static void Main() 
    { 
  
        // Creating a HashSet of strings 
        HashSet<string> mySet = new HashSet<string>(); 
  
        // Inserting elements in HashSet 
        mySet.Add("DS"); 
        mySet.Add("C++"); 
        mySet.Add("Java"); 
        mySet.Add("JavaScript"); 
  
        // Check if a HashSet contains 
        // the specified element 
        if (mySet.Contains("Java")) 
            Console.WriteLine("Required Element is present"); 
        else
            Console.WriteLine("Required Element is not present"); 
    } 
} 

輸出:

Required Element is present

參考:



相關用法


注:本文由純淨天空篩選整理自Sahil_Bansall大神的英文原創作品 C# | HashSet Class。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。