<1>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace HashTable键值对集合
{
class Program
{
static void Main(string[] args)
{
//创建了一个键值对集合对象
Hashtable ht = new Hashtable();
//-------------------------------Add() 添加
//Add(object key, object value) ;根据里氏转换定律,当一个地方需要一个父类对象,你可以给它一个子类对象。因为object是所有类的父类,所以你可以给它任何类型的数据
ht.Add(1, "张三");
ht.Add(2, "李四");
ht.Add(3, "王五");
ht.Add(false, "假");
ht.Add("数组", new int[] { 5, 6, 7 });
ht[4] = "新来的"; //除了Add()方法外,这也是一种添加数据的方式;在ht集合中创建key为4值为“新来的”的键值对
//ht.Add(1, "赵六");//运行会报错:因为键是唯一的,ht里已经有一个key为1的键值对了。如果再添加就报错了。但是以下方法却可以
ht[1] = "赵六"; // 这里.net内部其实做了一个判断:如果ht里存在key为1的键值对,那么就将key为1的值替换为“赵六”。如果不存在key为1的键值对,那么就创建key为1值为赵六的键值对。
//在键值对集合中是根据“键”去找“值”的
//-------------------------------Clear()清空所有元素;
ht.Clear();
//-------------------------------Remove()移除指定元素
ht.Remove(1);//移除key为1的键值对
//-------------------------------Contains()包含
//Contains()与ContainsKey()是一样的
bool b = ht.Contains(1);// 检查ht键值对集合里是否有包含key为1的键值对
bool c = ht.ContainsKey(1);//检查ht键值对集合里是否有包含key为1的键值对。
// 如果 System.Collections.Hashtable 包含带有指定的 value 的元素,则为 true;否则为 false。
bool d = ht.ContainsValue("王五"); //即检查ht集合中是否包含值为“王五”的键值对。
//---------------------------------------------
//特别要注意:Hashtable的键不能用for循环来遍历,因为Hashtable的键可以是object类型的,例如
Hashtable hs = new Hashtable();
hs.Add(1, "张三");
hs.Add(false, "李四");
for (int i = 0; i < hs.Count; i++)
{
//因为hs总共有2项。所以i的值从0开始 到1为止。而hs这个键值对里没有以0为key的值,所以这里首先输出了一个空,然后i=1的时候 hs[1] 这个时候hs这个键值对里有一个以1为key的值,所以输出了“张三”
Console.WriteLine(hs[i]);
}
//哈希键值对需要这样遍历
foreach (var item in ht.Keys)
{
Console.WriteLine("键是---{0}-------值是{1}", item, ht[item]); //这里是遍历的是keys 所有item是键,ht[item] 是键对应的值;
}
foreach (var item in ht.Keys)
{
Console.WriteLine(item); //遍历key ;这里输出:1,2,3,false,数组
}
foreach (var item in ht.Values)
{
Console.WriteLine(item);//遍历value ;这里输出 张三,李四,王五,假,System.Int32[]
}
Console.ReadKey();
}
}
}
Dictionary<Tkey,Tvalue>
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//我们在定义Dictionary的时候就已经确定了它的键,和值的类型了。而在定义Hashtable这种键值对的的时候,并没有确定键和值的数据类型,
Dictionary<int, object> o = new Dictionary<int, object>();
o.Add(4, 5);
o.Add(6, "b");
foreach (var item in o.Keys)
{
Console.WriteLine(o[item]);
}
Console.ReadKey();
}
}
}