C# Hashtable的用法
记录下来方便看
1.
哈希表(HashTable)又叫做散列表,根据关键码值(即键值对)而直接访问的数据结构。
2. Add 方法
为了给集合添加成员,Add 方法需要首先检查来确保成员不在集合内。如果成员在集合内,那么什么操作也不
做。如果成员不在集合内,则把它添加到散列表中。
public void Add(Object item) { if (!data.ContainsValue(item)) data.Add(Hash(item), item); }
既然数据项必须作为键值对添加到散列表中,所以通过添加要加入到集合内的数据项字符的 ASCII 码值的方法
就可以计算散列值。下面是 Hash 方法:
private string 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 方法
当然,这里需要能把成员从集合内移除掉的方法,还需要确定集合内成员数量(多少)的方法。下面就是简单
明了的方法:
//这是移除的方法 public void Remove(Object item) { data.Remove(Hash(item)); } //确定数量多少的方法 public int 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 方法会首先检查集合
的大小,如果第一个集合合格,再接着检查第一个集合的每一个成员是否是第二个集合的成员。代码如下所示:
public bool Subset(CSet aSet) { if (this.Size() > aSet.Size()) return false; else foreach (Object key in this.data.Keys) if (!(aSet.data.Contains(key))) return false; return true; }
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; } public override string ToString() { string s = “”; foreach (Object key in data.Keys) s += data[key] + " "; return s; }
写到纸上太慢了,博客好用还省时间,还方便自己看,比较好用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器