02 字典及扩展方法二

这个主要是用来总结有关Dictionary添加元素的方法

第一种:简单用法

Dictionary<string, int>  或者  Dictionary<string, string>

第一步:我首先定义了一个类:DictiaonaryTest,然后在类中定义了一个全局变量,接下来完成如下功能测试

1、元素的添加

2、遍历字典中的key值并输出

3、遍历字典中的val值并输出

4、遍历字典,遍历字典,并将key值和val值都输出

public class DictiaonaryTest
{
        //定义全局变量 并初始化字典
        Dictionary<string, int> dic = new Dictionary<string, int>()
        {
            {"C#", 2 },
            {"VB", 1 },
            {"C", 0 },
            {"C++", -1}
        };

        #region 01 常规用法 添加元素

        /// <summary>
        /// 为字典添加元素
        /// </summary>
        public void TestDicAdd()
        {
            Dictionary<string, int> dicSample = new Dictionary<string, int>();
            dicSample.Add("C#", 2);
            dicSample.Add("VB", 1);
            dicSample.Add("C", 0);
            dicSample.Add("C++", -1);

            // 判断是否存在相应的key并显示 key对应的值
            if (dicSample.ContainsKey("C#"))
            {
                int p = dicSample["C#"];
                MessageBox.Show(p.ToString());
            }
        }

        /// <summary>
        /// 遍历字典中的key
        /// </summary>
        public void TestDicEachKey()
        {
            int i = 0;
            string str = string.Empty;
            foreach (var dickey in dic.Keys)
            {
                str += "key" + i + ":" + dickey + "
";
                i++;
            }
            MessageBox.Show(str);
        }

        /// <summary>
        /// 遍历字典中的val
        /// </summary>
        public void TestDicEachValue()
        {
            int i = 0;
            string str = string.Empty;
            foreach (var dicVal in dic.Values)
            {
                str += "val" + i + ":" + dicVal + "
";
                i++;
            }
            MessageBox.Show(str);
        }

        public void TestDicEach()
        {
            int i = 0;
            string str = string.Empty;
            foreach (var dicitem in dic)
            {
                str += "key" + i + ":" + dicitem.Key + "	" + "val" + i + ":" + dicitem.Value + "
";
                i++;
            }
            MessageBox.Show(str);
        }

        #endregion
}

第二种: Dictionary的Value为一个数组

Dictionary<String, String[]> dicArr = new Dictionary<String, String[]>()
{
       { "浙江",new string[] {"Huzhou", "HangZhou", "TaiZhou"}},
       { "上海",new string[] { "Budong", "Buxi" }}
};

 public void TestDicArrEach()
 {
       int i = 0;
       string str = string.Empty;
       foreach (var dicitem in dicArr)
       {
            str += "key" + i + ":" + dicitem.Key + "	" + "val" + i + ":";
            foreach (var item in dicitem.Value)
            {
                 str += item + "
";
             }
                i++;
       }
       MessageBox.Show(str);
 }

第三种:value 是个对象

Dictionary<int, Dog> dicObj = new Dictionary<int, Dog>()
{
    { 1,new Dog() { DogId = 1, DogName = "小白", DogAge = 10, DogToy = "小球"}},
    { 2,new Dog() {  DogId = 2, DogName = "小黑", DogAge = 20, DogToy = "狗骨头" }},
    { 3,new Dog() { DogId = 3, DogName = "小花", DogAge = 30, DogToy = "小球"}}
};

public void TestDiffMethod()
{
   Console.WriteLine("添加");
   dicObj.TryAdd(4, new Dog() { DogId = 4, DogName = "老妖精", DogAge = 40, DogToy = "篮球" });           //此处写了一个扩展方法
   dicObj.ForeachEx();

   Console.WriteLine("添加Or替换1");
   dicObj.AddOrReplace(2, new Dog() { DogId = 2, DogName = "小熊", DogAge = 20, DogToy = "蜂蜜" });      //此处写了一个扩展方法
   dicObj.ForeachEx();

   Console.WriteLine("添加Or替换2");
   dicObj.AddOrReplace(5, new Dog() { DogId = 2, DogName = "小熊", DogAge = 20, DogToy = "蜂蜜" });
   dicObj.ForeachEx();

   Console.WriteLine("根据键值获取某个值:");
   Dog d = dicObj.GetValByKey(5, new Dog() { });
   Console.WriteLine(d.ToString());

   Console.WriteLine("批量添加:");
   Dictionary<int, Dog> dicObj2 = new Dictionary<int, Dog>()
   {
        { 3,new Dog() { DogId = 1, DogName = "小白", DogAge = 10, DogToy = "小球"}},
        { 4,new Dog() {  DogId = 2, DogName = "小黑", DogAge = 20, DogToy = "狗骨头" }},
        { 5,new Dog() { DogId = 3, DogName = "小花", DogAge = 30, DogToy = "小球"}}
   };
   dicObj.AddBatch(dicObj2, false);
   dicObj.ForeachEx();
}

  

写了一个类用来扩展类:DictionaryExtend

 public static class DictionaryExtend
    {
        /// <summary>
        /// 向字典中添加元素
        /// </summary>
        /// <typeparam name="TKey">key类型</typeparam>
        /// <typeparam name="TVal">val类型</typeparam>
        /// <param name="dic"></param>
        /// <param name="key">key</param>
        /// <param name="val">val</param>
        /// <returns></returns>
        public static Dictionary<TKey, TVal> TryAdd<TKey, TVal>(this Dictionary<TKey, TVal> dic, TKey key, TVal val)
        {
            if (!dic.ContainsKey(key))
            {
                dic.Add(key, val);
            }
            return dic;
        }

        /// <summary>
        /// 将键和值添加或替换到字典中:如果不存在,则添加;存在,则替换
        /// </summary>
        public static Dictionary<TKey, TVal> AddOrReplace<TKey, TVal>(this Dictionary<TKey, TVal> dict, TKey key, TVal value)
        {
            dict[key] = value;
            return dict;
        }

        /// <summary>
        /// 根据key值获取key对应的val值
        /// </summary>
        /// <typeparam name="TKey"></typeparam>
        /// <typeparam name="TVal"></typeparam>
        /// <param name="dic"></param>
        /// <param name="key"></param>
        /// <param name="defaultValue"></param>
        /// <returns></returns>
        public static TVal GetValByKey<TKey, TVal>(this Dictionary<TKey, TVal> dic, TKey key, TVal defaultValue)
        {
            return dic.ContainsKey(key) ? dic[key] : defaultValue;
        }

        /// <summary>
        /// 向字典中批量添加键值对
        /// </summary>
        /// <typeparam name="TKey"></typeparam>
        /// <typeparam name="TVal"></typeparam>
        /// <param name="dic"></param>
        /// <param name="diclist"></param>
        /// <param name="replaceExisted">如果已存在,是否替换</param>
        /// <returns></returns>
        public static Dictionary<TKey, TVal> AddBatch<TKey, TVal>(this Dictionary<TKey, TVal> dic, Dictionary<TKey, TVal> diclist, bool replaceExisted = false)
        {
            foreach (var item in diclist)
            {
                if (!dic.ContainsKey(item.Key) || replaceExisted)
                {
                    dic[item.Key] = item.Value;
                }
            }
            return dic;
        }

        public static void ForeachEx<Int, TVal>(this Dictionary<Int, TVal> dic)
        {
            int i = 0;
            string str = string.Empty;
            if (dic.Count > 0)
            {
                foreach (var item in dic)
                {
                    str += "key" + i + ":" + item.Key + "  Val" + i + ":" + item.Value.ToString() + "
";
                    i++;
                }
            }
            Console.WriteLine(str);
        }
}

  

原文地址:https://www.cnblogs.com/hellowawei/p/5948711.html