索引器、哈希表Hashtabl、字典Dictionary(转)

一、索引器

索引器类似于属性,不同之处在于它们的get访问器采用参数。要声明类或结构上的索引器,使用this关键字。

示例:

索引器示例代码

/// <summary>
/// 存储星期几的类。声明了一个get访问器,它接受字符串,并返回相应的整数
/// </summary>
public class 星期
{
    public string[] weeks = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };

//索引器 它接受星期几的字符串,将它作为索引index
    public int this[string day]
    {
       //get访问器 并返回相应的整数
        get
       {
            int i = 0;

foreach (var item in weeks)
            {
                if (item == day)
                {
                    return i;
                }
                i++;
            }

//没找到返回-1
            return -1;
        }
    }
}

二、哈希表Hashtable

Hastable是哈希表的实现,能根据关键字取关键值,这key的类型是object, value的类型也是object。

在哈希表中添加一个key/value键值对:HashtableObject.Add(key,value);

在哈希表中去除某个key/value键值对:HashtableObject.Remove(key);

从哈希表中移除所有元素:                  HashtableObject.Clear();

判断哈希表是否包含特定键key:          HashtableObject.Contains(key);

遍历Hashtable对象的两种方法:

由于Hashtable每个元素都是一个键/值对,因此元素类型既不是键的类型,也不是值的类型,而是DictionaryEntry类型。

Hashtable示例代码

//方法一
foreach (System.Collections.DictionaryEntry de in myHashtable)
{
    //注意HastTable内存储的默认类型是object,需要进行转换才可以输出
    Console.WriteLine(de.Key.ToString());
    Console.WriteLine(de.Value.ToString());
}

//方法二
System.Collections.IDictionaryEnumerator enumerator = myHashtable.GetEnumerator();

while (enumerator.MoveNext())
{
    Console.WriteLine(enumerator.Key);       // Hashtable关健字
    Console.WriteLine(enumerator.Value);      // Hashtable值
}

三、字典Dictionary

Dictionary<Tkey,Tvalue>是Hastbale的泛型实现。

//遍历键
foreach (string key in myDictionary.Keys)
{
    //遍历某键的值
    foreach (string val in myDictionary[key])
    {

}
}

由于 Dictionary 是键和值的集合,因此元素类型并非键类型或值类型。相反,元素类型是键类型和值类型的 KeyValuePair。

字典遍历示例

foreach (KeyValuePair<string, string> kvp in myDictionary)
{
    string key = kvp.Key;//key包含了字典里的键
    for (int i = 0; i < kvp.Value.Count; i++)
    {
        Response.Write(kvp.Value[i]);
    }
}

示例:

代码

//定义一个<string,int>的Dictionary,让它的值进行添加(也可以用Add方法)
Dictionary<string, int> dic = new Dictionary<string, int>();

//添加两个键为"成绩1","成绩2";并为它们的值赋为0
dic["成绩1"] = 0;
dic["成绩2"] = 0;

// 把这两个值分别加1
dic["成绩1"]++;
dic["成绩2"]++;

时间: 2024-12-23 07:25:51

索引器、哈希表Hashtabl、字典Dictionary(转)的相关文章

普通集合和泛型集合的区别,哈希表和字典表的区别,队列和堆栈的区别以及堆和栈的区别。

普通集合和泛型集合的区别: 泛型集合与传统集合相比 类型更安全. 泛型集合无需装箱拆箱操作. 泛型的重要性. 泛型是未来五年的主流技术 ... 通常情况下,建议您使用泛型集合,因为这样可以获得类型安全的直接优点而不需要从基集合类型派生并实现类型特定的成员.此外,如果集合元素为值类型,泛型集合类型的性能通常优于对应的非泛型集合类型(并优于从非泛型基集合类型派生的类型),因为使用泛型时不必对元素进行装箱. 下面的泛型类型对应于现有的集合类型: List 是对应于 ArrayList 的泛型类. Di

哈希表和字典的应用

Egg: string x = string.Empty;                string y = string.Empty;                Hashtable ht = new Hashtable();                ht.Add("12", "ab");                ht.Add("34", "cd");                foreach (Dict

哈希表——swift字典的实现原理

我们先看看维基百科的介绍 散列表(Hash table,也叫哈希表),是根据关键字(Key value)而直接访问在内存存储位置的数据结构.也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度.这个映射函数称做散列函数,存放记录的数组称做散列表. 一个通俗的例子是,为了查找电话簿中某人的号码,可以创建一个按照人名首字母顺序排列的表(即建立人名到首字母的一个函数关系),在首字母为W的表中查找"王"姓的电话号码,显然比直接查找就要快得多.这

.net 哈希表和字典的基本用法

哈希表 传送门:https://www.cnblogs.com/xpvincent/archive/2013/01/15/2860841.html using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp { class Progr

使用python实现哈希表、字典、集合

哈希表 哈希表(Hash Table, 又称为散列表),是一种线性表的存储结构.哈希表由一个直接寻址表和一个哈希函数组成.哈希函数h(k)将元素关键字k作为自变量,返回元素的存储下标. 简单哈希函数: 除法哈希:h(k) = k mod m 乘法哈希:h(k) = floor(m(kA mod 1)) 0<A<1 假设有一个长度为7的数组,哈希函数h(k) = k mod 7,元素集合{14, 22, 3, 5}的存储方式如下图: 哈希冲突 由于哈希表的大小是有限的,而要存储的值的总数量是无限

repeater绑定数组、哈希表、字典 ArrayList/HashTable,Dictionary为datasource

原文发布时间为:2009-11-19 -- 来源于本人的百度文章 [由搬家工具导入] repeater绑定数组、哈希表、字典datasource为ArrayList/HashTable,Dictionary时,范例 Default7.aspx 前台页面:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default7.aspx.cs" Inherits="Defaul

修饰符|值类型、引用类型|List|索引器

1.简述private.protected.public.internal 修饰符的访问权限 private:私有成员,在类的内部可以访问 protected:保护成员,在该类内部和继承类中可以访问 public:公共成员.无访问限制 internal:当前程序集可以访问 ---延伸 类的实例化,(如何使用类?),用关键字new 类 实例名=new 类(): 字段,方法.属性都类的成员:member 都要加访问级别? 访问级别的用处在于控制成员在哪些地方可以被访问,达到面向对象中"封装"

《Java数据结构和算法》- 哈希表

Q: 如何快速地存取员工的信息? A: 假设现在要写一个程序,存取一个公司的员工记录,这个小公司大约有1000个员工,每个员工记录需要1024个字节的存储空间,因此整个数据库的大小约为1MB.一般的计算机内存都可以满足. 为了尽可能地存取每个员工的记录,使用工号从1(公司创业者)到1000(最近雇佣的工人).将工号作为关键字(事实上,用其他作为关键字完全没有必要).即使员工离职不在公司,他们的记录也是要保存在数据库中以供参考,在这种情况下需要使用什么数据结构呢? A: 一种可能使用数组,每个员工

哈希表的理解

哈希表是种数据结构,它可以提供快速的插入操作和查找操作.第一次接触哈希表时,它的优点多得让人难以置信.不论哈希表中有多少数据,插入和删除(有时包括侧除)只需要接近常量的时间即0(1)的时间级.实际上,这只需要几条机器指令. 对哈希表的使用者一一人来说,这是一瞬间的事.哈希表运算得非常快,在计算机程序中,如果需要在一秒种内查找上千条记录通常使用哈希表(例如拼写检查器)哈希表的速度明显比树快,树的操作通常需要O(N)的时间级.哈希表不仅速度快,编程实现也相对容易. 哈希表也有一些缺点它是基于数组的,