📜  C#中的HashSet与示例

📅  最后修改于: 2021-05-29 19:25:56             🧑  作者: Mango

在C#中,HashSet是唯一元素的无序集合。 .NET 3.5中引入了此集合。它支持集合的实现,并使用哈希表进行存储。此集合属于通用类型集合,并且在System.Collections.Generic命名空间下定义。当我们要防止将重复的元素放置在集合中时,通常使用它。与列表相比,HashSet的性能要好得多。

重要事项:

  • HashSet类实现ICollectionIEnumerableIReadOnlyCollectionISetIEnumerableIDeserializationCallbackISerializable接口。
  • 在HashSet中,未定义元素的顺序。您无法对HashSet的元素进行排序。
  • 在HashSet中,元素必须是唯一的。
  • 在HashSet中,不允许重复的元素。
  • 提供了许多数学设置操作,例如交集,并集和差。
  • HashSet的容量是它可以容纳的元素数。
  • HashSet是一个动态集合,这意味着在添加新元素时,HashSet的大小会自动增加。
  • 在HashSet中,您只能存储相同类型的元素。

如何创建一个HashSet?

HashSet类提供了用于创建HashSet的7种不同类型的构造函数,这里我们仅使用HashSet()构造函数。要了解有关HashSet的构造函数的更多信息,可以参考C#| Java语言。 HashSet类

HashSet():用于创建HashSet类的实例,该实例为空,并使用默认的相等比较器作为集合类型。

步骤1:借助using关键字,在程序中包含System.Collections.Generic命名空间:

using System.Collections.Generic;

步骤2:使用HashSet类创建一个HashSet,如下所示:

HashSet Hashset_name = new HashSet(); 

步骤3:如果要在HashSet中添加元素,请使用Add()方法在HashSet中添加元素。您还可以使用集合初始值设定项将元素存储在HashSet中。

步骤4:使用foreach循环访问HashSet的元素。如下例所示。

例子:

// C# program to illustrate how to
// create hashset
using System;
using System.Collections.Generic;
  
class GFG {
  
    // Main Method
    static public void Main()
    {
  
        // Creating HashSet
        // Using HashSet class
        HashSet myhash1 = new HashSet();
  
        // Add the elements in HashSet
        // Using Add method
        myhash1.Add("C");
        myhash1.Add("C++");
        myhash1.Add("C#");
        myhash1.Add("Java");
        myhash1.Add("Ruby");
        Console.WriteLine("Elements of myhash1:");
  
        // Accessing elements of HashSet
        // Using foreach loop
        foreach(var val in myhash1)
        {
            Console.WriteLine(val);
        }
  
        // Creating another HashSet
        // using collection initializer
        // to initialize HashSet
        HashSet myhash2 = new HashSet() {10,
                               100,1000,10000,100000};
                  
        // Display elements of myhash2
        Console.WriteLine("Elements of myhash2:");
        foreach(var valu in myhash2)
        {
            Console.WriteLine(valu);
        }
    }
}
输出:
Elements of myhash1:
C
C++
C#
Java
Ruby
Elements of myhash2:
10
100
1000
10000
100000

如何从HashSet中删除元素?

在HashSet中,允许您从HashSet中删除元素。 HashSet 类提供了三种不同的方法来删除元素,这些方法是:

  • Remove(T):此方法用于从HashSet对象中删除指定的元素。
  • RemoveWhere(Predicate):此方法用于从HashSet集合中删除所有与指定谓词定义的条件匹配的元素。
  • 清除:此方法用于从HashSet对象中删除所有元素。

范例1:

// C# program to illustrate how to
// remove elements of HashSet
using System;
using System.Collections.Generic;
  
class GFG {
  
    // Main Method
    static public void Main()
    {
  
        // Creating HashSet
        // Using HashSet class
        HashSet myhash = new HashSet();
  
        // Add the elements in HashSet
        // Using Add method
        myhash.Add("C");
        myhash.Add("C++");
        myhash.Add("C#");
        myhash.Add("Java");
        myhash.Add("Ruby");
  
        // After using Remove method
        Console.WriteLine("Total number of elements present"+
                            " in myhash: {0}", myhash.Count);
  
        // Remove element from HashSet
        // Using Remove method
        myhash.Remove("Ruby");
  
        // Before using Remove method
        Console.WriteLine("Total number of elements present"+
                            " in myhash: {0}", myhash.Count);
  
        // Remove all elements from HashSet
        // Using Clear method
        myhash.Clear();
        Console.WriteLine("Total number of elements present"+
                             " in myhash:{0}", myhash.Count);
    }
}
输出:

Total number of elements present in myhash: 5
Total number of elements present in myhash: 4
Total number of elements present in myhash:0

设定作业

HashSet类还提供了一些用于对集合执行不同操作的方法,这些方法是:

  • UnionWith(IEnumerable):此方法用于修改当前的HashSet对象,以包含其本身,指定的集合或这两者中都存在的所有元素。

    例子:

    // C# program to illustrate set operations
    using System;
    using System.Collections.Generic;
      
    class GFG {
      
        static public void Main()
        {
      
            // Creating HashSet
            // Using HashSet class
            HashSet myhash1 = new HashSet();
      
            // Add the elements in HashSet
            // Using Add method
            myhash1.Add("C");
            myhash1.Add("C++");
            myhash1.Add("C#");
            myhash1.Add("Java");
            myhash1.Add("Ruby");
      
            // Creating another HashSet
            // Using HashSet class
            HashSet myhash2 = new HashSet();
      
            // Add the elements in HashSet
            // Using Add method
            myhash2.Add("PHP");
            myhash2.Add("C++");
            myhash2.Add("Perl");
            myhash2.Add("Java");
      
            // Using UnionWith method
            myhash1.UnionWith(myhash2);
            foreach(var ele in myhash1)
            {
                Console.WriteLine(ele);
            }
        }
    }
    
    输出:
    C
    C++
    C#
    Java
    Ruby
    PHP
    Perl
    
  • IntersectWith(IEnumerable):此方法用于修改当前HashSet对象,使其仅包含该对象和指定集合中存在的元素。

    例子:

    // C# program to illustrate set operations
    using System;
    using System.Collections.Generic;
      
    class GFG {
      
        // Main Method
        static public void Main()
        {
      
            // Creating HashSet
            // Using HashSet class
            HashSet myhash1 = new HashSet();
      
            // Add the elements in HashSet
            // Using Add method
            myhash1.Add("C");
            myhash1.Add("C++");
            myhash1.Add("C#");
            myhash1.Add("Java");
            myhash1.Add("Ruby");
      
            // Creating another HashSet
            // Using HashSet class
            HashSet myhash2 = new HashSet();
      
            // Add the elements in HashSet
            // Using Add method
            myhash2.Add("PHP");
            myhash2.Add("C++");
            myhash2.Add("Perl");
            myhash2.Add("Java");
      
            // Using IntersectWith method
            myhash1.IntersectWith(myhash2);
            foreach(var ele in myhash1)
            {
                Console.WriteLine(ele);
            }
        }
    }
    
    输出:
    C++
    Java
    
  • ExceptWith(IEnumerable):此方法用于从当前HashSet对象中删除指定集合中的所有元素。

    例子:

    // C# program to illustrate set operations
    using System;
    using System.Collections.Generic;
      
    class GFG {
      
        // Main Method
        static public void Main()
        {
      
            // Creating HashSet
            // Using HashSet class
            HashSet myhash1 = new HashSet();
      
            // Add the elements in HashSet
            // Using Add method
            myhash1.Add("C");
            myhash1.Add("C++");
            myhash1.Add("C#");
            myhash1.Add("Java");
            myhash1.Add("Ruby");
      
            // Creating another HashSet
            // Using HashSet class
            HashSet myhash2 = new HashSet();
      
            // Add the elements in HashSet
            // Using Add method
            myhash2.Add("PHP");
            myhash2.Add("C++");
            myhash2.Add("Perl");
            myhash2.Add("Java");
      
            // Using ExceptWith method
            myhash1.ExceptWith(myhash2);
            foreach(var ele in myhash1)
            {
                Console.WriteLine(ele);
            }
        }
    }
    
    输出:
    C
    C#
    Ruby