<1>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Dictionary字典
{
class Program
{
static void Main(string[] args)
{
//HashTable键值对集合的声明方式: Hashtable ht = new Hashtable(); 声明的过程中是没有确定键和值的类型的
//Dictionary键值对集合与HashTable键值对集合有所有不同,Dictionary的键和值的类型都已经声明确定了
Dictionary<int, string> dic = new Dictionary<int, string>(); //创建一个键值对集合对象,键的类型为int。值的类型为string。
dic.Add(1, "张三");
dic.Add(2, "李四");
//d.Add("张三",28) 错误;因为Dictionary<int,string> 已经确定它的键只能是int类型,值只能是string类型。
//dic.Add(1, "新的张三");//报错。key是唯一的。前面已经添加了一个key为1的键值对了。
dic[1] = "新的张三"; //这样就不会报错了。其实这里是做了一个判断。即:如果dic键值对里一个key为1的键值对, 那么就将它的值更新为“新的张三” 。如果没有key为1的键值对。那么就添加一个key为1 值为“新的张三”的键值对
//dic.Clear(); //清空dic这个键值对集合的所有元素。
//HashTable键值对集合只能有这种方式进行遍历。即只能遍历keys.
foreach (var item in dic.Keys) //遍历dic这个键值对的所有key
{
Console.WriteLine(item); //输出1,2
Console.WriteLine("键是:{0}----值是:{1}", item, dic[item]);//输出:键是:1----值是:张三 键是:2----值是:李四
}
//而Dictionary键值对除了用以上方式进行遍历外,还可以用这种凡是进行遍历。
foreach (KeyValuePair<int, string> item in dic) //将dic这个键值对以 键值对(一对一对)的形式来遍历。
{
Console.WriteLine(item); //输出: [1, 张三] [2, 李四]
Console.WriteLine("键是:{0}----值是:{1}", item.Key, item.Value);//输出:键是:1----值是:张三 键是:2----值是:李四
}
//Dictionary键值对集合实例:将str这个字符串的每个字母做为key,每个字母出现的次数作为值。添加到键值对对象中。
string str = "welcome to china";
Dictionary<char, int> dic2 = new Dictionary<char, int>();
int i = 1;
foreach (var item in str) //遍历str这个字符串
{
if (item == ' ') //如果当前遍历到的字符为' '就跳过当前循环。即:去掉空格
{
continue; //跳过当前循环,进行下一轮循环。
}
if (dic2.Keys.Contains(item)) //如果dic2这个键值对集合中包含了 key为 item 这个键值对
{
dic2[item]++; //那么就将key为item这个键值对的值在原有的基础上自增一次。即+1
}
else
{
dic2.Add(item, 1); //否则就将item 作为key。1作为默认值。添加到dic2这个键值对中。
}
}
foreach (var item in dic2)
{
Console.WriteLine("字母:{0}----出现的次数为:{1}次", item.Key, item.Value);
}
Console.ReadKey();
}
}
}