C# Hashtable的用法

本文涉及的产品
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
模型训练 PAI-DLC,5000CU*H 3个月
交互式建模 PAI-DSW,5000CU*H 3个月
简介: Hashtable的用法

1.

哈希表(HashTable)又叫做散列表,根据关键码值(即键值对)而直接访问的数据结构。

2.   Add 方法

 

为了给集合添加成员,Add 方法需要首先检查来确保成员不在集合内。如果成员在集合内,那么什么操作也不

做。如果成员不在集合内,则把它添加到散列表中。

publicvoid Add(Object item)

{

if (!data.ContainsValue(item))

data.Add(Hash(item), item);

}

既然数据项必须作为键值对添加到散列表中,所以通过添加要加入到集合内的数据项字符的 ASCII 码值的方法

就可以计算散列值。下面是 Hash 方法:


privatestring Hash(Object item)

{

char[] chars;

string s = item.ToString();

int hashValue = 0;

chars = s.ToCharArray();

for (int i = 0; i <= chars.GetUpperBound(0); i++)

hashValue += (int)chars[i];

return hashValue.ToString();

}


3.  Remove 方法和 Size 方法

 

当然,这里需要能把成员从集合内移除掉的方法,还需要确定集合内成员数量(多少)的方法。下面就是简单

明了的方法:


//这是移除的方法

publicvoid Remove(Object item)

{

data.Remove(Hash(item));

}

//确定数量多少的方法

publicint Size()

{

return data.Count;

}


4.   Union 方法

Union 方法会把两个集合合并。这个方法首先会通过添加第一个集合全部成员的方式来构建一个新的集合。然后,方法会检查第二个集合内的每一个成员从而确定这些成员是否已经

在第一个集合内。如果检查的成员在第一个集合内,那么就会跳过这个成员,反之则会把这个成员添加到新集合内。

 


public CSet Union(CSet aSet)

{

CSet tempSet = new CSet();

foreach (Object hashObject in data.Keys)

tempSet.Add(this.data[hashObject]);

foreach (Object hashObject in aSet.data.Keys)

if (!(this.data.ContainsKey(hashObject)))

tempSet.Add(aSet.data[hashObject]);

return tempSet;

}


5.   Intersection 方法

Intersection 方法循环遍历集合的关键字,并且检查是否会在传递的集合内找到该关键字。如果找到,就把该成

员添加到新集合内并且跳过其他操作。


public CSet Intersection(CSet aSet)

{

CSet tempSet = new CSet();

foreach (Object hashObject in data.Keys)

if (aSet.data.Contains(hashObject))

tempSet.Add(aSet.data[hashObject]);

tempSet.Add(aSet.GetValue(hashObject))

return tempSet;

}


6.    Subset 方法

一个集合是另一个集合子集的第一要素就是该集合在尺寸上必须小于第二个集合。Subset 方法会首先检查集合

的大小,如果第一个集合合格,再接着检查第一个集合的每一个成员是否是第二个集合的成员。代码如下所示:


publicbool Subset(CSet aSet)

{

if (this.Size() > aSet.Size())

returnfalse;

else

foreach (Object key inthis.data.Keys)

if (!(aSet.data.Contains(key)))

returnfalse;

returntrue;

}


7.   Difference 方法

这里已经讨论过如何获得两个集合的差异。为了执行此推算,方法会循环遍历第一个集合的关键字,并且寻找

与第二个集合匹配的任何内容。如果成员存在于第一个集合内而又没有在第二个集合内找到的话,就把此成员添加

到新集合内。下面就是代码(连同 ToString 方法一起):


public CSet Difference(CSet aSet)

{

CSet tempSet = new CSet();

foreach (Object hashObject in data.Keys) if (!(aSet.data.Contains(hashObject)))

tempSet.Add(data[hashObject]);

return tempSet;

}

publicoverridestring ToString()

{

string s = “”;

foreach (Object key in data.Keys)

s += data[key] + "";

return s;

}


相关文章
|
5月前
|
C#
C# Dev chartControl的用法
C# Dev chartControl的用法
|
5月前
|
安全 编译器 C#
C#学习相关系列之多线程---lock线程锁的用法
C#学习相关系列之多线程---lock线程锁的用法
|
5月前
|
安全 C#
C# List基本用法
C# List基本用法
|
5月前
|
C#
C#学习相关系列之多线程---ConfigureAwait的用法
C#学习相关系列之多线程---ConfigureAwait的用法
|
5月前
|
C#
C#学习相关系列之多线程---TaskCompletionSource用法(八)
C#学习相关系列之多线程---TaskCompletionSource用法(八)
104 0
|
5月前
|
Java C#
C#学习系列相关之多线程(五)----线程池ThreadPool用法
C#学习系列相关之多线程(五)----线程池ThreadPool用法
|
5月前
|
开发框架 .NET 编译器
C# 9.0中的静态匿名函数:引入static关键字的新用法
【1月更文挑战第15天】C# 9.0为匿名函数带来了一个新的修饰符static,允许开发者明确指定匿名函数不会捕获其包含作用域中的任何变量。这一特性增强了代码的性能和可读性,同时减少了因不小心捕获变量而导致的潜在错误。本文将详细探讨C# 9.0中静态匿名函数的语法、使用场景以及它们如何影响代码的性能和安全性。
|
5月前
|
开发框架 .NET C#
C#学习相关系列之Linq用法---where和select用法(二)
C#学习相关系列之Linq用法---where和select用法(二)
221 2
|
4月前
|
C#
技术经验分享:C#DUID的用法及取得整数的几个方法
技术经验分享:C#DUID的用法及取得整数的几个方法
61 1
|
5月前
|
开发框架 .NET C#
C#学习相关系列之Linq用法---group和join相关用法(三)
C#学习相关系列之Linq用法---group和join相关用法(三)
156 1