using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LeanCloud.Realtime.Internal { internal static class DictionaryEngine { internal static IDictionary Merge(this IDictionary dataLeft, IDictionary dataRight) { if (dataRight == null) return dataLeft; foreach (var kv in dataRight) { if (dataLeft.ContainsKey(kv.Key)) { dataLeft[kv.Key] = kv.Value; } else { dataLeft.Add(kv); } } return dataLeft; } internal static object Grab(this IDictionary data, string path) { var keys = path.Split('.').ToList(); if (keys.Count == 1) return data[keys[0]]; var deep = data[keys[0]] as IDictionary; keys.RemoveAt(0); string deepPath = string.Join(".", keys.ToArray()); return Grab(deep, deepPath); } internal static IDictionary Trim(this IDictionary data) { return data.Where(kvp => kvp.Value != null).ToDictionary(k => k.Key, v => v.Value); } } }