c# 进阶 Dictionary

using System;
using System.Collections.Generic;

namespace Lesson8_Dictionary
{
    class Program
    {
        #region pratice-1
        public static string pratice_1()
        {
            Dictionary<int, string> Number_capital = new Dictionary<int, string>();
            Console.WriteLine("请输入一个不超过3位数的数字");
            Number_capital.Add(1, "壹");
            Number_capital.Add(2, "贰");
            Number_capital.Add(3, "叁");
            Number_capital.Add(4, "肆");
            Number_capital.Add(5, "伍");
            Number_capital.Add(6, "陆");
            Number_capital.Add(7, "柒");
            Number_capital.Add(8, "捌");
            Number_capital.Add(9, "玖");
            Number_capital.Add(0, "零");
            int[] num = new int[3];
            for (int i = 0; i < 3; ++i)
            {
                //注意,Read()方法存储为ASCII码,需要减去48
                num[i] = Console.Read() - 48;
            }
            string ans = "";
            for (int i = 0; i < 3; ++i)
            {
                ans += Number_capital[num[i]];
                Console.Write(Number_capital[num[i]]);
            }
            return ans;
        }
        #endregion

        static void Main(string[] args)
        {
            Console.WriteLine("Dictionary");
            #region 知识点一 Dictionary本质
            //可以将Dictionary理解为拥有泛型的Hashtable
            //它也是基于键的哈希代码组织起来的键/值对
            //键值对类型从Hashtable的object变为了可以自己制定的泛型
            #endregion

            #region 知识点二 声明
            //需要引用命名空间
            //using System.Collections.Generic
            Dictionary<int, string> dic = new Dictionary<int, string>();
            #endregion

            #region 知识点三 增删查改

            #region 增
            dic.Add(1, "123");
            dic.Add(2, "456");
            dic.Add(3, "789");
            //dic.Add(3, "789"); error 不能添加相同的键
            #endregion

            #region 删
            //1.只能通过键去删除
            //删除不存在的键不做处理
            dic.Remove(1);
            dic.Remove(4);  //Nothing to do

            //2.清空
            dic.Clear();

            dic.Add(1, "123");
            dic.Add(2, "456");
            dic.Add(3, "789");
            #endregion

            #region 查
            //1.通过键查看值,索引器
            //获取或设置与指定的键关联的值。
            //public TValue this[TKey key] { get; set; }
            Console.WriteLine(dic[1]);
            Console.WriteLine(dic[2]);
            //Console.WriteLine(dic[4]);    error 无法访问不存在的键

            //2.查看是否存在
            // 确定是否 Dictionary<TKey,TValue> 包含指定键。
            //public bool ContainsKey (TKey key);
            if (dic.ContainsKey(1))
            {
                Console.WriteLine("Key 1 is exist");
            }
            //确定 Dictionary<TKey,TValue> 是否包含特定值。
            //public bool ContainsValue (TValue value);
            if (dic.ContainsValue("123"))
            {
                Console.WriteLine("Value 123 is exist");
            }
            #endregion

            #region 改
            //直接通过索引器修改
            Console.WriteLine(dic[1]);
            dic[1] = "111";
            Console.WriteLine(dic[1]);
            #endregion

            #endregion

            #region 知识点四 遍历
            //获取元素数量
            Console.WriteLine(dic.Count);
            //1.遍历所有键
            foreach (int item in dic.Keys)
            {
                Console.WriteLine(item + ":" + dic[item]);
            }

            //2.遍历所有值
            foreach (string item in dic.Values)
            {
                Console.WriteLine(item);
            }

            //3.键值一起遍历
            foreach (KeyValuePair<int, string> item in dic)
            {
                Console.WriteLine(item.Key + ":" + item.Value);
            }
            #endregion

            #region pratice-1
            string numberCapatial = pratice_1();
            #endregion

            #region pratice-2
            string text = "Welcome to unity world!";
            Dictionary<char, int> pra2 = new Dictionary<char, int>();
            text = text.ToLower();
            foreach(char item in text)
            {
                if (item >= 'a' && item <= 'z')
                {
                    if (pra2.ContainsKey(item))
                    {
                        pra2[item]++;
                    }
                    else
                    {
                        pra2.Add(item, 1);
                    }
                }
            }
            foreach (KeyValuePair<char, int> item in pra2)
            {
                Console.WriteLine(item.Key + ":" + item.Value);
            }
            #endregion
        }
    }
}