zoukankan      html  css  js  c++  java
  • 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完整代码
  • 相关阅读:
    MySQL架构备份
    MySQL物理备份 xtrabackup
    MySQL物理备份 lvm-snapshot
    MySQL逻辑备份mysqldump
    MySQL逻辑备份into outfile
    MySQ数据备份
    前端基础-- HTML
    奇淫异巧之 PHP 后门
    php中代码执行&&命令执行函数
    windows进程中的内存结构(缓冲溢出原理)
  • 原文地址:https://www.cnblogs.com/cang12138/p/8384481.html
Copyright © 2011-2022 走看看