比较两个字典是否相等

比较两个字典是否相等

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


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


废话不多说,方案如下:

先准备数据

//	先准备两个字典,赋初值。
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²)

/// 
        /// 判断两个字典是否完全相等
        /// 
        /// 
        /// 
        /// 
        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写法(最简) —— 时间复杂度 时间与其二相差不大 推荐

		/// 
        /// 判断两个字典是否完全相等
        /// 
        /// 
        /// 
        /// 
        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);
        }





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




山高路远,江湖再见。

你可能感兴趣的:(.Net,c#,字典)