• C# HashSet 用法、Hashtable用法


     HashSet 用法

    .NET 3.5在System.Collections.Generic命名空间中包含一个新的集合类:HashSet<T>。这个集合类包含不重复项的无序列表。这种集合称为“集(set)”。集是一个保留字,所以该类有另一个名称HashSet<T>。这个名称很容易理解,因为这个集合基于散列值,插入元素的操作非常快,不需要像List<T>类那样重排集合。

    HashSet<T>类提供的方法可以创建合集和交集。

    创建HashSet:

     HashSet<string> hs = new HashSet<string>();

     HashSet<string> companyTeams = new HashSet<string>() { "Ferrari", "McLaren", "Toyota", "BMW", "Renault", "Honda" };

    HashSet<T>改变集的值的方法:

    Add(): 如果某元素不在集合中,Add()方法就把该元素添加到集合中。在其返回值Boolean中,返回元素是否添加的信息

    eg:

     if (!companyTeams.Add("McLaren"))
                Console.WriteLine("McLaren was already in this set");

    Clear():方法Clear()删除集合中的所有元素

    eg: companyTeams.Clear();

    Remove():Remove()方法删除指定的元素

    eg: companyTeams.Remove("McLaren");

    RemoveWhere(): RemoveWhere()方法需要一个Predicate<T>委托作为参数。删除满足谓词条件的所有元素

    Predicate 可以委托给一个函数或者一个拉姆达表达式:

    委托给拉姆达表达式:

    eg:

     companyTeams.RemoveWhere(company => { if (company.Length > 5) { return true; } else { return false; } });

    委托给一个函数:

    eg:

     companyTeams.RemoveWhere(CheckLength);

    public bool CheckLength(string company)
     {
                return company.Length > 5 ? true : false;
    }

    CopyTo(): CopyTo()把集合中的元素复制到一个数组中

    eg:

    string[] strArray = new string[companyTeams.Count];
    companyTeams.CopyTo(strArray);
     foreach (string str in strArray)
    {
            Console.WriteLine(str);
    }

    ExceptWith():ExceptWith()方法把一个集合作为参数,从集中删除该集合中的所有元素

    eg:

     companyTeams.ExceptWith(privateTeams);
     foreach (var str in companyTeams)
     {
            Console.WriteLine(str);
     }

    UnionWith():UnionWith()方法把传送为参数的集合中的所有元素添加到集中

    eg:

     companyTeams.UnionWith(privateTeams);
     foreach (var str in companyTeams)
     {
             Console.WriteLine(str);
    }

    HashSet<T>仅返回集的信息、不修改元素的方法。

    Contains():如果所传送的元素在集合中,方法Contains()就返回true

    eg:

    if (companyTeams.Contains("BMW"))
     {
              Console.WriteLine("companyTeams contains "BMW"");
    }

    IsSubsetOf():如果参数传送的集合是集的一个子集,方法IsSubsetOf()就返回true

    eg:

    if (traditionalTeams.IsSubsetOf(companyTeams))
     {
                 Console.WriteLine("traditionalTeams is " + "subset of companyTeams");
     }

    IsSupersetOf():如果参数传送的集合是集的一个超集,方法IsSupersetOf()就返回true

    eg:
     if (companyTeams.IsSupersetOf(traditionalTeams))
     {
                Console.WriteLine("companyTeams is a superset of " + "traditionalTeams");
    }

    Overlaps():如果参数传送的集合中至少有一个元素与集中的元素相同,Overlaps()就返回true

    eg:

    traditionalTeams.Add("Williams");
     if (privateTeams.Overlaps(traditionalTeams))
    {
                Console.WriteLine("At least one team is " + "the same with the traditional " + "and privateteams");
    }

    SetEquals():如果参数传送的集合和集包含相同的元素,方法SetEquals()就返回true

    http://www.cnblogs.com/xiaopin/archive/2011/01/08/1930540.html

    Hashtable用法:

    一、哈希表(Hashtable)简述
         在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key/value的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable中key/value键值对均为object类型,所以Hashtable可以支持任何类型的key/value键值对.

    二、哈希表的简单操作
    在哈希表中添加一个key/value键值对:HashtableObject.Add(key,value);
    在哈希表中去除某个key/value键值对:HashtableObject.Remove(key);
    从哈希表中移除所有元素:                HashtableObject.Clear();
    判断哈希表是否包含特定键key:         HashtableObject.Contains(key);

    1. Hashtable ht = new Hashtable(); //创建一个Hashtable实例
    2. ht.Add("E", "e");//添加key/value键值对
    3. ht.Add("A", "a");
    4. ht.Add("C", "c");
    5. ht.Add("B", "b");
    6. string s = (string)ht["A"];
    7. if (ht.Contains("E")) //判断哈希表是否包含特定键,其返回值为true或false
    8. Console.WriteLine("the E key:exist");
    9. ht.Remove("C");//移除一个key/value键值对
    10. Console.WriteLine(ht["A"]);//此处输出a
    11. ht.Clear();//移除所有元素
    12. Console.WriteLine(ht["A"]); //此处将不会有任何输出


    三、遍历哈希表
    遍历哈希表需要用到DictionaryEntry Object,代码如下:

    1. foreach (DictionaryEntry de in ht) //ht为一个Hashtable实例
    2. {
    3. Console.WriteLine(de.Key);//de.Key对应于key/value键值对key
    4. Console.WriteLine(de.Value);//de.Key对应于key/value键值对value
    5. }


    四、对哈希表进行排序
         对哈希表进行排序在这里的定义是对key/value键值对中的key按一定规则重新排列,但是实际上这个定义是不能实现的,因为我们无法直接在Hashtable进行对key进行重新排列,如果需要Hashtable提供某种规则的输出,可以采用一种变通的做法:

    1. ArrayList akeys = new ArrayList(ht.Keys); //别忘了导入System.Collections
    2. akeys.Sort(); //按字母顺序进行排序
    3. foreach (string skey in akeys)
    4. {
    5. Console.Write(skey + ":");
    6. Console.WriteLine(ht[skey]);//排序后输出
    7. }


    http://www.cnblogs.com/feisky/archive/2009/10/29/1591956.html

  • 相关阅读:
    luogu P3174 毛毛虫
    P3386二分图最大匹配模版
    P4180 严格次小生成树
    差分约束
    高斯消元
    P1306 斐波那契公约数
    极值
    排序
    P1852 [国家集训队]跳跳棋
    高精度模版
  • 原文地址:https://www.cnblogs.com/zbliao/p/12908891.html
Copyright © 2020-2023  润新知