Exemplo n.º 1
0
Arquivo: Dict.cs Projeto: abmiues/Core
        /// <summary>
        /// 通过深度数组来移除数组中的一个值
        /// </summary>
        /// <param name="dict">规定字典</param>
        /// <param name="keys">深度数组(深度数组以倒序传入)</param>
        private static bool RemoveValueByDepthArray(IDictionary <string, object> dict, ref string[] keys)
        {
            var perv = new Stack <KeyValuePair <string, IDictionary <string, object> > >(keys.Length);

            while (true)
            {
                if (keys.Length <= 1)
                {
                    dict.Remove(Arr.Pop(ref keys));
                    while (perv.Count > 0)
                    {
                        var data    = perv.Pop();
                        var tmpDict = (IDictionary <string, object>)data.Value[data.Key];
                        if (tmpDict.Count <= 0)
                        {
                            data.Value.Remove(data.Key);
                            continue;
                        }
                        break;
                    }
                    return(true);
                }

                object result;
                var    key = Arr.Pop(ref keys);
                if (!dict.TryGetValue(key, out result) || !(result is IDictionary <string, object>))
                {
                    return(false);
                }

                perv.Push(new KeyValuePair <string, IDictionary <string, object> >(key, dict));
                dict = (IDictionary <string, object>)result;
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// 通过深度数组来访问字典
        /// </summary>
        /// <param name="dict">规定字典</param>
        /// <param name="keys">深度数组(深度数组以倒序传入)</param>
        /// <returns>字典值</returns>
        private static object GetValueByDepthArray(IDictionary <string, object> dict, ref string[] keys)
        {
            while (true)
            {
                if (!dict.TryGetValue(Arr.Pop(ref keys), out object result) || keys.Length <= 0)
                {
                    return(result);
                }

                dict = result as IDictionary <string, object>;
                if (dict == null)
                {
                    return(null);
                }
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// 通过深度数组来访问字典,并为其指定位置设定一个值
        /// </summary>
        /// <param name="dict">规定字典</param>
        /// <param name="keys">深度数组(深度数组以倒序传入)</param>
        /// <param name="value">设定值</param>
        private static void SetValueByDepthArray(IDictionary <string, object> dict, ref string[] keys, object value)
        {
            while (true)
            {
                if (keys.Length <= 1)
                {
                    dict[Arr.Pop(ref keys)] = value;
                    return;
                }

                var key = Arr.Pop(ref keys);
                if (!dict.TryGetValue(key, out object result) || !(result is IDictionary <string, object>))
                {
                    dict[key] = result = new Dictionary <string, object>();
                }

                dict = (IDictionary <string, object>)result;
            }
        }