比较两个字典是否相等

比较两个字典是否相等

有些情况下会遇到比较两个字典是否相等的问题
直观来想,会比较键是否一致,其对应的值是否相等


但是同时,作为一个合格的程序猿,我们更应该考虑的是效率问题。


废话不多说,方案如下:

先准备数据

//	先准备两个字典,赋初值。
Dictionary<int, object> dic1 = new Dictionary<int, object>();
            Dictionary<int, object> dic2 = new Dictionary<int, object>();
            dic1.Add(1, "1");
            dic1.Add(2, "1");
            dic1.Add(3, "1");
            dic1.Add(4, "1");
            dic1.Add(5, "1");

            dic2.Add(1, "1");
            dic2.Add(2, "1");
            dic2.Add(3, "1");
            dic2.Add(4, "1");
            dic2.Add(5, "1");

方法1:字典序列化比较 —— 时间复杂度2n

			//
            //  方法1:序列化比较   时间复杂度2n
            //
            bool flagSame = true;
            var j1 = JsonConvert.SerializeObject(dic1);
            var j2 = JsonConvert.SerializeObject(dic2);

            if (!j1.Equals(j2))
            {
                flagSame = false;
            }
            Console.WriteLine(flagSame ? "相等" : "不相等");

方法2:字典比较 —— 时间复杂度 min:O(1) max:O(n²)

/// <summary>
        /// 判断两个字典是否完全相等
        /// </summary>
        /// <param name="d1"></param>
        /// <param name="d2"></param>
        /// <returns></returns>
        public static bool DictionaryEquals(Dictionary<string, string> d1, Dictionary<string, string> d2)
        {
            bool equal = true;
            if (d1.Count != d2.Count)
            { // Require equal count.
                return false;
            }
            foreach (var pair in d1)
            {
                string value;
                if (d2.TryGetValue(pair.Key, out value))
                {
                    if (value != pair.Value)
                    {
                        equal = false;
                        break;
                    }
                }
                else
                {
                    equal = false;
                    break;
                }
            }
            Console.WriteLine(equal ? "相等" : "不相等");
            return equal;
        }

方法3:Linq写法(最简) —— 时间复杂度 时间与其二相差不大 推荐

		/// <summary>
        /// 判断两个字典是否完全相等
        /// </summary>
        /// <param name="d1"></param>
        /// <param name="d2"></param>
        /// <returns></returns>
        public static bool DictionaryEquals(Dictionary<string, string> d1, Dictionary<string, string> d2)
        {
            return !d1.Any(t1 => d2.FirstOrDefault(t2 => t2.Key == t1.Key).Value != t1.Value);
        }





友情提示:引用或转载请注明出处。




山高路远,江湖再见。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值