/// <summary>
        /// 根据事件发生的频率进行分组,并以事件频率作为偏序关系进行升序排序,
        /// 产生一个与 IGrouping<BigInteger, StatistTotalByDateTime> 为单元的有序列表
        /// </summary>
        /// <returns></returns>
        public TioSalamanca[] GroupDateTimesByTotal()
        {
            IOrderedEnumerable <IGrouping <BigInteger, StatistTotalByDateTime> > groupingForTotal = from e in _entries
                                                                                                    group e.Value by e.Value.Total into newgroup
                                                                                                    orderby newgroup.Key
                                                                                                    select newgroup;

#if DEBUG
            Debug.WriteLine("Executing GroupDateTimesByDiff...");
            foreach (var item in groupingForTotal)
            {
                Debug.WriteLine(item.Key);
                foreach (var subitem in item)
                {
                    Debug.WriteLine($"  {subitem}");
                }
            }
#endif
            // 一个级别有若干个Key;一个Key有若干条记录
            // levelByTotal 指示每个级别有多少个 Key(groupingForTotal根据Total分组出来的Key)
            TioSalamanca levels = null;

            // groups 代表 dateTimes 根据每个元素的 Total 分组之后 groups(item.Key) 的总数
            BigInteger groups = groupingForTotal.LongCount();

            if (groups > 5)
            {
                // keysForEachLevel 表示每个级别应包含多少个 item.Key
                BigInteger keysForEachLevel = groups / 5;
                BigInteger remain           = groups % 5;

#if DEBUG
                Debug.WriteLine($"groups: {groups}");
                Debug.WriteLine($"keysForEachLevel: {keysForEachLevel}");
                Debug.WriteLine($"remain: {remain}");
#endif

                TioSalamanca[] entries  = new TioSalamanca[5];
                BigInteger     keyIncre = 0;
                // entriesIncre 没有必要使用 BigInteger,因为不管有多少个 Key,分成多少个 group,
                // entries 的长度永远为 5,因为纪录器最多只能分五级
                int entriesIncre = 0;
                foreach (var item in groupingForTotal)
                {
                    keyIncre += 1;
                    if (keyIncre == keysForEachLevel)
                    {
                        if (entriesIncre < entries.Length - 1)
                        {
                            keyIncre = 0;
                            levels.Add(item);
                            entries[entriesIncre] = levels;
                            entriesIncre         += 1;
                            levels = null;
                        }
                        else if (entriesIncre == entries.Length - 1)
                        {
                            if (remain != 0)
                            {
                                levels.Add(item);
                            }
                            // 这么做迫使下次循环 keyIncre 仍然为 5,
                            // 这样能再次进入 keyIncre == keysForEachLevel 语句块;
                            keyIncre -= 1;
                        }
                    }
                    else if (levels == null)
                    {
                        levels = new TioSalamanca {
                            item
                        };
                    }
                    else
                    {
                        levels.Add(item);
                    }
                }
                entries[entriesIncre] = levels;
                return(entries);
            }
            else if (groups <= 5 && groups > 0)
            {
                TioSalamanca[] entries = new TioSalamanca[groups.BigIntegerToInt32()];
                TioSalamanca   temp    = groupingForTotal.ToList();
                for (int i = 0; i < entries.Length; i++)
                {
                    entries[i] = new TioSalamanca(1)
                    {
                        temp[i]
                    };
                }
                return(entries);
            }
            else
            {
                throw new InvalidOperationException($"Unkown error. Groups is {groups}");
            }
        }