Dictionary排序

 有时候由于某些要求会对Dictionary排序,一般有两种方法。
1、使用SortedDictionary。
这种自动会对保存的值进行排序。
 static void Main(string[] args)   {        SortedDictionary<int, object> testDictioary = new SortedDictionary<int, object>();              int flag = 0;                do              {                  Random random = new Random();                    int temp = random.Next(100);                    if (!testDictioary.ContainsKey(temp))                  {                      testDictioary.Add(temp, null);                  }                    flag = testDictioary.Count;                } while (flag < 20);                Console.WriteLine("未排序前:");                foreach (int key in testDictioary.Keys)              {                  Console.Write(string.Format(@"{0}  ", key));              }  }

结果:

2、自己写的方法。如下

 public static void Sort(Dictionary<int, object> dictionary)          {              try              {                  List<int> sortList = new List<int>();                    Dictionary<int, object> tempDictionary = new Dictionary<int, object>();                    foreach (int key in dictionary.Keys)                  {                      sortList.Add(key);                                            tempDictionary.Add(key, dictionary[key]);                  }                    int flag = 1;                    int i, j;                    int itemCount = sortList.Count;                    int itemTemp;                    for (i = 1; i < itemCount && flag == 1; i++)                  {                      flag = 0;                        for (j = 0; j < itemCount - i; j++)                      {                          int countfore = sortList[j];                            int countback = sortList[j + 1];                            if (countfore > countback)                          {                              flag = 1;                                itemTemp = sortList[j];                                sortList[j] = sortList[j + 1];                                sortList[j + 1] = itemTemp;                          }                      }                  }                  dictionary.Clear();                    for (int n = 0; n < itemCount; n++)                  {                      foreach (int tempKey in tempDictionary.Keys)                      {                          int value = sortList[n];                            if (tempKey.Equals(value))                          {                              if (!dictionary.ContainsKey(tempKey))                              {                                  dictionary.Add(tempKey, tempDictionary[tempKey]);                              }                          }                      }                  }              }              catch { }          }

        调用结果如下:

   static void Main(string[] args)          {              Console.WriteLine("key为数字");                Dictionary<int, object> testDictioary = new Dictionary<int, object>();                int flag = 0;                do              {                  Random random = new Random();                    int temp = random.Next(100);                    if (!testDictioary.ContainsKey(temp))                  {                      testDictioary.Add(temp, null);                  }                    flag = testDictioary.Count;                } while (flag < 20);                Console.WriteLine("未排序前:");                foreach (int key in testDictioary.Keys)              {                  Console.Write(string.Format(@"{0}  ", key));              }                Console.WriteLine();                CustomMethod.Sort(testDictioary);                Console.WriteLine("排序后:");                foreach (int key in testDictioary.Keys)              {                  Console.Write(string.Format(@"{0}  ", key));              }                Console.ReadLine();            }

 


 那么这种方法是否是多此一举呢,因为SortedDictionary完全可以满足排序了。但是有时key会是这样的,100+“ssdd”,或100+20,是字符串类型。这样就能用到上面的方法了。比如以key为100+20这种类型为例。改动一下Sort方法。

   public static void Sort(Dictionary<string, object> dictionary)          {              try              {                  List<int> sortList = new List<int>();                    Dictionary<string, object> tempDictionary = new Dictionary<string, object>();                    foreach (string key in dictionary.Keys)                  {                      int intKey = Convert.ToInt32(key.Substring(0, key.IndexOf("+")));                        sortList.Add(intKey);                        tempDictionary.Add(key, dictionary[key]);                  }                    int flag = 1;                    int i, j;                    int itemCount = sortList.Count;                    int itemTemp;                    for (i = 1; i < itemCount && flag == 1; i++)                  {                      flag = 0;                        for (j = 0; j < itemCount - i; j++)                      {                          int countfore = sortList[j];                            int countback = sortList[j + 1];                            if (countfore > countback)                          {                              flag = 1;                                itemTemp = sortList[j];                                sortList[j] = sortList[j + 1];                                sortList[j + 1] = itemTemp;                          }                      }                  }                  dictionary.Clear();                    for (int n = 0; n < itemCount; n++)                  {                      foreach (string tempKey in tempDictionary.Keys)                      {                          string value = sortList[n].ToString();                            if (tempKey.StartsWith(string.Format(@"{0}+", value)))                          {                              if (!dictionary.ContainsKey(tempKey))                              {                                  dictionary.Add(tempKey, tempDictionary[tempKey]);                              }                          }                      }                  }              }              catch { }          }

        调用:

         static void Main(string[] args)          {              Console.WriteLine("key为字符串");                Dictionary<string, object> testDictioary = new Dictionary<string, object>();                int flag = 0;                do              {                  Random random = new Random();                    int temp = random.Next(100);                    int tempValue = random.Next(100);                    string keyString = string.Format(@"{0}+{1}", temp, tempValue);                    if (!testDictioary.ContainsKey(keyString))                  {                      testDictioary.Add(keyString, null);                  }                    flag = testDictioary.Count;                } while (flag < 20);                Console.WriteLine("未排序前:");                foreach (string key in testDictioary.Keys)              {                  Console.Write(string.Format(@"{0}  ", key));              }                Console.WriteLine();                CustomOtherSort.Sort(testDictioary);                Console.WriteLine("排序后:");                foreach (string key in testDictioary.Keys)              {                  Console.Write(string.Format(@"{0}  ", key));              }                Console.ReadLine();            }

        结果:
       
        详细工程:http://download.csdn.net/detail/yysyangyangyangshan/4114133

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值