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

posted @ 2020-05-18 09:54  小寒2020  阅读(2402)  评论(0编辑  收藏  举报