/// <summary>
        /// 解析
        /// </summary>
        /// <param name="table"></param>
        /// <returns></returns>
        public static PeriodRmsedNumeralStoarge Parse(ObjectTableStorage table)
        {
            var storage = new PeriodRmsedNumeralStoarge();

            foreach (var row in table.BufferedValues)
            {
                var    paramName  = row["Name"].ToString();
                var    timePeriod = TimePeriod.Parse(row["TimePeriod"].ToString());
                double val        = Double.NaN;
                double rms        = Double.NaN;
                if (row.ContainsKey("Value"))
                {
                    val = double.Parse(row["Value"].ToString());
                }
                if (row.ContainsKey("Rms"))
                {
                    rms = double.Parse(row["Rms"].ToString());
                }
                storage.GetOrCreate(paramName)[timePeriod] = new RmsedNumeral(val, rms);
            }
            return(storage);
        }
        /// <summary>
        ///读取
        /// </summary>
        /// <param name="A"></param>
        /// <param name="B"></param>
        /// <returns></returns>
        public static PeriodRmsedNumeralStoarge Combine(PeriodRmsedNumeralStoarge A, PeriodRmsedNumeralStoarge B)
        {
            PeriodRmsedNumeralStoarge result = new PeriodRmsedNumeralStoarge();

            //先加到一起
            foreach (var kv in A.KeyValues)
            {
                var dic = result.GetOrCreate(kv.Key);
                foreach (var item in kv.Value.KeyValues)
                {
                    dic[item.Key] = item.Value;
                }
            }

            foreach (var kv in B.KeyValues)
            {
                var dic = result.GetOrCreate(kv.Key);
                foreach (var item in kv.Value.KeyValues)
                {
                    dic[item.Key] = item.Value;
                }
            }

            //合并同类项
            Dictionary <string, List <Pair <TimePeriod> > > toCombies = new Dictionary <string, List <Pair <TimePeriod> > >();

            foreach (var kv in result.KeyValues)
            {
                //查找交叉,且数值相等的时段
                var crossed = new List <Pair <TimePeriod> >();
                toCombies[kv.Key] = crossed;
                List <TimePeriod> notLoopAgain = new List <TimePeriod>();
                foreach (var item1 in kv.Value.KeyValues)
                {
                    notLoopAgain.Add(item1.Key);
                    item1.Key.Tag = item1.Value;//保存数值
                    foreach (var item2 in kv.Value.KeyValues)
                    {
                        if (item1.Key == item2.Key || notLoopAgain.Contains(item2.Key) || item1.Value != item2.Value)
                        {
                            continue;
                        }
                        if (item2.Key.IsIntersect(item2.Key))
                        {
                            crossed.Add(new Pair <TimePeriod>(item1.Key, item2.Key));
                        }
                    }
                }
            }
            //移除
            foreach (var item in toCombies)
            {
                foreach (var kv in item.Value)
                {
                    result.Remove(item.Key, kv.First);
                    result.Remove(item.Key, kv.Second);
                }
            }

            //合并,再添加
            foreach (var item in toCombies)
            {
                var data = result.GetOrCreate(item.Key);
                foreach (var kv in item.Value)
                {
                    var newP = kv.First.Exppand(kv.Second);
                    data[newP] = (RmsedNumeral)kv.First.Tag;
                }
            }
            return(result);
        }