C# Hashtable

哈希表(Hashtable)

在.NET Framework中,Hashtable 是 System.Collections 命名空间提供的一个容器,用于处理和表现类似 key-value 的键值对,其中 key 通常可用来快速查找,同时 key 是区分大小写;value 用于存储对应于 key 的值。

Hashtable 中 key-value 键值对均为 object 类型,所以 Hashtable 可以支持任何类型的 key-value 键值对。

创建Hashtable实例

Hashtable ht = new Hashtable();

Add 添加key-value键值对

ht.Add("A", "1");
ht.Add("B", "2");
ht.Add("C", "3");
ht.Add("D", "4");

遍历

复制代码
// 遍历哈希表只能用foreach来遍历,因为Hashtable不能用索引访问
// 遍历key
foreach (Object item in ht.Keys)
{
    Console.WriteLine((string)item);
}
// 遍历value
foreach (Object item in ht.Values)
{
    Console.WriteLine((string)item);
}
//遍历
foreach (DictionaryEntry de in ht)
{
    Console.WriteLine("Key : {0} ; Value : {1}.", de.Key, de.Value);
}
// 遍历哈希表(结果与上面相同)
IDictionaryEnumerator myEnumerator = ht.GetEnumerator();
while (myEnumerator.MoveNext())
{
    Console.WriteLine("Key : {0} ; Value : {1}.", myEnumerator.Key, ht[myEnumerator.Key]);
}
复制代码

哈希表排序

ArrayList list = new ArrayList(ht.Keys);
list.Sort();
foreach (string key in list)
{
    Console.WriteLine("Key : {0} ; Value : {1}.", key, ht[key]);
}

赋值

ht["A"] = "你好";

Contains 判断哈希表是否包含特定键

//返回值为 true 或 false
if (ht.Contains("A"))
{
    Console.WriteLine("Key : {0} ; Value : {1}.", "A", ht["A"]);
}

Remove 移除一个key-value键值对

ht.Remove("C");

Clear 移除所有元素

ht.Clear();

Clone 复制

Hashtable ht2 = ht.Clone() as Hashtable;
ht2["A"] = "世界";
ht["B"] = "晚安";
ht.Add("E", "5");

可以看到,Clone 以后,两个 Hashtable 是互不影响的。

CopyTo 将HashTable中键或值列表复制到数组中

复制代码
String[] myTargetArray = new String[15];
myTargetArray[0] = "The";
myTargetArray[1] = "quick";
myTargetArray[2] = "brown";
myTargetArray[3] = "fox";
myTargetArray[4] = "jumped";
myTargetArray[5] = "over";
myTargetArray[6] = "the";
myTargetArray[7] = "lazy";
myTargetArray[8] = "dog";
ht.Keys.CopyTo(myTargetArray, 6);  //赋值键到数组中,从第7位起覆盖。
ht.Values.CopyTo(myTargetArray, 10);//赋值值到数组中,从第7位起覆盖。
复制代码

未执行 ht.Keys.CopyTo(myTargetArray, 6) 前

执行 ht.Keys.CopyTo(myTargetArray, 6) 后

执行 ht.Values.CopyTo(myTargetArray, 10) 后

完整代码

复制代码
using System;
using System.Collections;//使用Hashtable时,必须引入这个命名空间 

namespace ConsoleTest
{
    class HashtableTest
    {
        public static void HashtableTestMain()
        {
            // 创建一个Hashtable实例
            Hashtable ht = new Hashtable();

            // 添加key-value键值对
            ht.Add("A", "1");
            ht.Add("B", "2");
            ht.Add("C", "3");
            ht.Add("D", "4");

            // 遍历哈希表只能用foreach来遍历,因为Hashtable不能用索引访问
            // 遍历key
            foreach (Object item in ht.Keys)
            {
                Console.WriteLine("Key : {0} ;", (string)item);
            }
            // 遍历value
            foreach (Object item in ht.Values)
            {
                Console.WriteLine("Value : {0} ;", (string)item);
            }
            //遍历
            foreach (DictionaryEntry de in ht)
            {
                Console.WriteLine("Key : {0} ; Value : {1}.", de.Key, de.Value);
            }

            // 哈希表排序
            ArrayList list = new ArrayList(ht.Keys);
            list.Sort();
            foreach (string key in list)
            {
                Console.WriteLine("Key : {0} ; Value : {1}.", key, ht[key]);
            }

            // 赋值
            ht["A"] = "你好";

            // 判断哈希表是否包含特定键,其返回值为true或false
            if (ht.Contains("A"))
            {
                Console.WriteLine("Key : {0} ; Value : {1}.", "A", ht["A"]);
            }

            // 移除一个key-value键值对
            ht.Remove("C");

            // 遍历哈希表
            IDictionaryEnumerator myEnumerator = ht.GetEnumerator();
            while (myEnumerator.MoveNext())
            {
                Console.WriteLine("Key : {0} ; Value : {1}.", myEnumerator.Key, ht[myEnumerator.Key]);
            }

            // 复制
            Hashtable ht2 = ht.Clone() as Hashtable;
            ht2["A"] = "世界";
            ht["B"] = "晚安";
            ht.Add("E", "5");

            // 将HashTable中键或值列表复制到数组的方法
            String[] myTargetArray = new String[15];
            myTargetArray[0] = "The";
            myTargetArray[1] = "quick";
            myTargetArray[2] = "brown";
            myTargetArray[3] = "fox";
            myTargetArray[4] = "jumped";
            myTargetArray[5] = "over";
            myTargetArray[6] = "the";
            myTargetArray[7] = "lazy";
            myTargetArray[8] = "dog";
            ht.Keys.CopyTo(myTargetArray, 6);  //赋值键到数组中,从第7位起覆盖。
            ht.Values.CopyTo(myTargetArray, 10);//赋值值到数组中,从第7位起覆盖。

            // 移除所有元素
            ht.Clear();
            Console.ReadKey();
        }
    }
}
Hashtable完整代码
复制代码

 

posted @     阅读(4851)  评论(2编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
历史上的今天:
2017-04-18 复选框的全选与反选
点击右上角即可分享
微信分享提示