Dictionary排序

有时候由于某些要求会对Dictionary排序,一般有两种方法。
1、使用SortedDictionary。
这种自动会对保存的值进行排序。
  1. static void Main(string[] args) 
  2.      SortedDictionary<int, object> testDictioary = new SortedDictionary<int, object>(); 
  3.            int flag = 0; 
  4.  
  5.            do 
  6.            { 
  7.                Random random = new Random(); 
  8.  
  9.                int temp = random.Next(100); 
  10.  
  11.                if (!testDictioary.ContainsKey(temp)) 
  12.                { 
  13.                    testDictioary.Add(temp, null); 
  14.                } 
  15.  
  16. flag = testDictioary.Count;
  17.  
  18.            } while (flag < 20); 
  19.  
  20.            Console.WriteLine("未排序前:"); 
  21.  
  22.            foreach (int key in testDictioary.Keys) 
  23.            { 
  24.                Console.Write(string.Format(@"{0}  ", key)); 
  25.            } 
 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、自己写的方法。如下

  1. public static void Sort(Dictionary<int, object> dictionary) 
  2.        { 
  3.            try 
  4.            { 
  5.                List<int> sortList = new List<int>(); 
  6.  
  7.                Dictionary<int, object> tempDictionary = new Dictionary<int, object>(); 
  8.  
  9.                foreach (int key in dictionary.Keys) 
  10.                { 
  11.                    sortList.Add(key); 
  12.                     
  13.                    tempDictionary.Add(key, dictionary[key]); 
  14.                } 
  15.  
  16.                int flag = 1; 
  17.  
  18.                int i, j; 
  19.  
  20.                int itemCount = sortList.Count; 
  21.  
  22.                int itemTemp; 
  23.  
  24.                for (i = 1; i < itemCount && flag == 1; i++) 
  25.                { 
  26.                    flag = 0; 
  27.  
  28.                    for (j = 0; j < itemCount - i; j++) 
  29.                    { 
  30.                        int countfore = sortList[j]; 
  31.  
  32.                        int countback = sortList[j + 1]; 
  33.  
  34.                        if (countfore > countback) 
  35.                        { 
  36.                            flag = 1; 
  37.  
  38.                            itemTemp = sortList[j]; 
  39.  
  40.                            sortList[j] = sortList[j + 1]; 
  41.  
  42.                            sortList[j + 1] = itemTemp; 
  43.                        } 
  44.                    } 
  45.                } 
  46.                dictionary.Clear(); 
  47.  
  48.                for (int n = 0; n < itemCount; n++) 
  49.                { 
  50.                    foreach (int tempKey in tempDictionary.Keys) 
  51.                    { 
  52.                        int value = sortList[n]; 
  53.  
  54.                        if (tempKey.Equals(value)) 
  55.                        { 
  56.                            if (!dictionary.ContainsKey(tempKey)) 
  57.                            { 
  58.                                dictionary.Add(tempKey, tempDictionary[tempKey]); 
  59.                            } 
  60.                        } 
  61.                    } 
  62.                } 
  63.            } 
  64.            catch { } 
  65.        } 
 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 { }
        }

        调用结果如下:

  1. static void Main(string[] args) 
  2.      { 
  3.          Console.WriteLine("key为数字"); 
  4.  
  5.          Dictionary<int, object> testDictioary = new Dictionary<int, object>(); 
  6.  
  7.          int flag = 0; 
  8.  
  9.          do 
  10.          { 
  11.              Random random = new Random(); 
  12.  
  13.              int temp = random.Next(100); 
  14.  
  15.              if (!testDictioary.ContainsKey(temp)) 
  16.              { 
  17.                  testDictioary.Add(temp, null); 
  18.              } 
  19.  
  20.              flag = testDictioary.Count; 
  21.  
  22.          } while (flag < 20); 
  23.  
  24.          Console.WriteLine("未排序前:"); 
  25.  
  26.          foreach (int key in testDictioary.Keys) 
  27.          { 
  28.              Console.Write(string.Format(@"{0}  ", key)); 
  29.          } 
  30.  
  31.          Console.WriteLine(); 
  32.  
  33.          CustomMethod.Sort(testDictioary); 
  34.  
  35.          Console.WriteLine("排序后:"); 
  36.  
  37.          foreach (int key in testDictioary.Keys) 
  38.          { 
  39.              Console.Write(string.Format(@"{0}  ", key)); 
  40.          } 
  41.  
  42.          Console.ReadLine(); 
  43.  
  44.      } 
   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方法。

  1. public static void Sort(Dictionary<string, object> dictionary) 
  2.      { 
  3.          try 
  4.          { 
  5.              List<int> sortList = new List<int>(); 
  6.  
  7.              Dictionary<string, object> tempDictionary = new Dictionary<string, object>(); 
  8.  
  9.              foreach (string key in dictionary.Keys) 
  10.              { 
  11.                  int intKey = Convert.ToInt32(key.Substring(0, key.IndexOf("+"))); 
  12.  
  13.                  sortList.Add(intKey); 
  14.  
  15.                  tempDictionary.Add(key, dictionary[key]); 
  16.              } 
  17.  
  18.              int flag = 1; 
  19.  
  20.              int i, j; 
  21.  
  22.              int itemCount = sortList.Count; 
  23.  
  24.              int itemTemp; 
  25.  
  26.              for (i = 1; i < itemCount && flag == 1; i++) 
  27.              { 
  28.                  flag = 0; 
  29.  
  30.                  for (j = 0; j < itemCount - i; j++) 
  31.                  { 
  32.                      int countfore = sortList[j]; 
  33.  
  34.                      int countback = sortList[j + 1]; 
  35.  
  36.                      if (countfore > countback) 
  37.                      { 
  38.                          flag = 1; 
  39.  
  40.                          itemTemp = sortList[j]; 
  41.  
  42.                          sortList[j] = sortList[j + 1]; 
  43.  
  44.                          sortList[j + 1] = itemTemp; 
  45.                      } 
  46.                  } 
  47.              } 
  48.              dictionary.Clear(); 
  49.  
  50.              for (int n = 0; n < itemCount; n++) 
  51.              { 
  52.                  foreach (string tempKey in tempDictionary.Keys) 
  53.                  { 
  54.                      string value = sortList[n].ToString(); 
  55.  
  56.                      if (tempKey.StartsWith(string.Format(@"{0}+", value))) 
  57.                      { 
  58.                          if (!dictionary.ContainsKey(tempKey)) 
  59.                          { 
  60.                              dictionary.Add(tempKey, tempDictionary[tempKey]); 
  61.                          } 
  62.                      } 
  63.                  } 
  64.              } 
  65.          } 
  66.          catch { } 
  67.      } 
   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 { }
        }

        调用:

  1. static void Main(string[] args) 
  2.     Console.WriteLine("key为字符串"); 
  3.  
  4.     Dictionary<string, object> testDictioary = new Dictionary<string, object>(); 
  5.  
  6.     int flag = 0; 
  7.  
  8.     do 
  9.     { 
  10.         Random random = new Random(); 
  11.  
  12.         int temp = random.Next(100); 
  13.  
  14.         int tempValue = random.Next(100); 
  15.  
  16.         string keyString = string.Format(@"{0}+{1}", temp, tempValue); 
  17.  
  18.         if (!testDictioary.ContainsKey(keyString)) 
  19.         { 
  20.             testDictioary.Add(keyString, null); 
  21.         } 
  22.  
  23.         flag = testDictioary.Count; 
  24.  
  25.     } while (flag < 20); 
  26.  
  27.     Console.WriteLine("未排序前:"); 
  28.  
  29.     foreach (string key in testDictioary.Keys) 
  30.     { 
  31.         Console.Write(string.Format(@"{0}  ", key)); 
  32.     } 
  33.  
  34.     Console.WriteLine(); 
  35.  
  36.     CustomOtherSort.Sort(testDictioary); 
  37.  
  38.     Console.WriteLine("排序后:"); 
  39.  
  40.     foreach (string key in testDictioary.Keys) 
  41.     { 
  42.         Console.Write(string.Format(@"{0}  ", key)); 
  43.     } 
  44.  
  45.     Console.ReadLine(); 
  46.  
         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、付费专栏及课程。

余额充值