有时候由于某些要求会对Dictionary排序,一般有两种方法。

1、使用SortedDictionary。

这种自动会对保存的值进行排序。

  1. static void Main(string[] args)
  2. {
  3. SortedDictionary<int,
    object> testDictioary = new SortedDictionary<int,
    object>();
  4. int flag = 0;
  5. do
  6. {
  7. Random random = new Random();
  8. int temp = random.Next(100);
  9. if (!testDictioary.ContainsKey(temp))
  10. {
  11. testDictioary.Add(temp, null);
  12. }
  13. flag = testDictioary.Count;
  14. } while (flag < 20);
  15. Console.WriteLine("未排序前:");
  16. foreach (int key
    in testDictioary.Keys)
  17. {
  18. Console.Write(string.Format(@"{0}  ", key));
  19. }
 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. Dictionary<int,
    object> tempDictionary = new Dictionary<int,
    object>();
  7. foreach (int key
    in dictionary.Keys)
  8. {
  9. sortList.Add(key);
  10. tempDictionary.Add(key, dictionary[key]);
  11. }
  12. int flag = 1;
  13. int i, j;
  14. int itemCount = sortList.Count;
  15. int itemTemp;
  16. for (i = 1; i < itemCount && flag == 1; i++)
  17. {
  18. flag = 0;
  19. for (j = 0; j < itemCount - i; j++)
  20. {
  21. int countfore = sortList[j];
  22. int countback = sortList[j + 1];
  23. if (countfore > countback)
  24. {
  25. flag = 1;
  26. itemTemp = sortList[j];
  27. sortList[j] = sortList[j + 1];
  28. sortList[j + 1] = itemTemp;
  29. }
  30. }
  31. }
  32. dictionary.Clear();
  33. for (int n = 0; n < itemCount; n++)
  34. {
  35. foreach (int tempKey
    in tempDictionary.Keys)
  36. {
  37. int value = sortList[n];
  38. if (tempKey.Equals(value))
  39. {
  40. if (!dictionary.ContainsKey(tempKey))
  41. {
  42. dictionary.Add(tempKey, tempDictionary[tempKey]);
  43. }
  44. }
  45. }
  46. }
  47. }
  48. catch { }
  49. }
 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. Dictionary<int,
    object> testDictioary = new Dictionary<int,
    object>();
  5. int flag = 0;
  6. do
  7. {
  8. Random random = new Random();
  9. int temp = random.Next(100);
  10. if (!testDictioary.ContainsKey(temp))
  11. {
  12. testDictioary.Add(temp,
    null);
  13. }
  14. flag = testDictioary.Count;
  15. } while (flag < 20);
  16. Console.WriteLine("未排序前:");
  17. foreach (int key
    in testDictioary.Keys)
  18. {
  19. Console.Write(string.Format(@"{0}  ", key));
  20. }
  21. Console.WriteLine();
  22. CustomMethod.Sort(testDictioary);
  23. Console.WriteLine("排序后:");
  24. foreach (int key
    in testDictioary.Keys)
  25. {
  26. Console.Write(string.Format(@"{0}  ", key));
  27. }
  28. Console.ReadLine();
  29. }
   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. Dictionary<string,
    object> tempDictionary = new Dictionary<string,
    object>();
  7. foreach (string key
    in dictionary.Keys)
  8. {
  9. int intKey = Convert.ToInt32(key.Substring(0, key.IndexOf("+")));
  10. sortList.Add(intKey);
  11. tempDictionary.Add(key, dictionary[key]);
  12. }
  13. int flag = 1;
  14. int i, j;
  15. int itemCount = sortList.Count;
  16. int itemTemp;
  17. for (i = 1; i < itemCount && flag == 1; i++)
  18. {
  19. flag = 0;
  20. for (j = 0; j < itemCount - i; j++)
  21. {
  22. int countfore = sortList[j];
  23. int countback = sortList[j + 1];
  24. if (countfore > countback)
  25. {
  26. flag = 1;
  27. itemTemp = sortList[j];
  28. sortList[j] = sortList[j + 1];
  29. sortList[j + 1] = itemTemp;
  30. }
  31. }
  32. }
  33. dictionary.Clear();
  34. for (int n = 0; n < itemCount; n++)
  35. {
  36. foreach (string tempKey
    in tempDictionary.Keys)
  37. {
  38. string value = sortList[n].ToString();
  39. if (tempKey.StartsWith(string.Format(@"{0}+", value)))
  40. {
  41. if (!dictionary.ContainsKey(tempKey))
  42. {
  43. dictionary.Add(tempKey, tempDictionary[tempKey]);
  44. }
  45. }
  46. }
  47. }
  48. }
  49. catch { }
  50. }
   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. {
  3. Console.WriteLine("key为字符串");
  4. Dictionary<string,
    object> testDictioary = new Dictionary<string,
    object>();
  5. int flag = 0;
  6. do
  7. {
  8. Random random = new Random();
  9. int temp = random.Next(100);
  10. int tempValue = random.Next(100);
  11. string keyString =
    string.Format(@"{0}+{1}", temp, tempValue);
  12. if (!testDictioary.ContainsKey(keyString))
  13. {
  14. testDictioary.Add(keyString,
    null);
  15. }
  16. flag = testDictioary.Count;
  17. } while (flag < 20);
  18. Console.WriteLine("未排序前:");
  19. foreach (string key
    in testDictioary.Keys)
  20. {
  21. Console.Write(string.Format(@"{0}  ", key));
  22. }
  23. Console.WriteLine();
  24. CustomOtherSort.Sort(testDictioary);
  25. Console.WriteLine("排序后:");
  26. foreach (string key
    in testDictioary.Keys)
  27. {
  28. Console.Write(string.Format(@"{0}  ", key));
  29. }
  30. Console.ReadLine();
  31. }
         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

Dictionary排序的更多相关文章

  1. C#语法基础用法Dictionary排序

    Dictionary排序 1.先看效果图: 2.核心逻辑如下: Dictionary<int, string> list = new Dictionary<int, string&g ...

  2. C#字典Dictionary排序(顺序、倒序)

    这里是针对.NET版本过低的排序方式,没怎么用过,记录一下: 一.创建字典Dictionary 对象 假如 Dictionary 中保存的是一个网站页面流量,key 是网页名称,值value对应的是网 ...

  3. Linq list 排序,Dictionary 排序

    C# 对List成员排序的简单方法 http://blog.csdn.net/wanzhuan2010/article/details/6205884 LINQ之路系列博客导航 http://www. ...

  4. C#中Dictionary排序方式

    转载自:https://www.cnblogs.com/5696-an/p/5625142.html 自定义类: https://files.cnblogs.com/files/xunhanliu/d ...

  5. C#中Dictionary<TKey,TValue>排序方式

    自定义类: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Sy ...

  6. c# Dictionary的遍历和排序

    c# Dictionary的遍历和排序 c#遍历的两种方式 for和foreach for: 需要指定首位数据.末尾数据.数据长度: for遍历语句中可以改变数据的值: 遍历规则可以自定义,灵活性较高 ...

  7. c# Dictionary的遍历和排序(转)

    c#遍历的两种方式 for和foreach for: 需要指定首位数据.末尾数据.数据长度: for遍历语句中可以改变数据的值: 遍历规则可以自定义,灵活性较高 foreach: 需要实现ienume ...

  8. C#对 Dictionary进行排序 转

    C# .net 3.5 以上的版本引入 Linq 后,字典Dictionary排序变得十分简单,用一句类似 sql 数据库查询语句即可搞定:不过,.net 2.0 排序要稍微麻烦一点,为便于使用,将总 ...

  9. c# 关于字典dictionary 按时间排序

    上文中说到sortedlist 排序是键排序,不符合项目要求问题,接着使用字典dictionary 对value 为时间按照升序排序,问题解决.中间涉及到linq的使用.还有其他的写法,但发现下边的写 ...

随机推荐

  1. mysql5.6默认情况下内存占用太大

    下载了mysql5.6.12 ,默认占用内存达400多M,  而原来使用的5.0 只有30M.. 解决方案:调整以下参数----------------performance_schema_max_t ...

  2. 使用TransactionScope(轻量级事务)实现数据库操作事务

    TransactionScope是.Net Framework 2.0滞后,新增了一个名称空间.它的用途是为数据库访问提供了一个"轻量级"[区别于:SqlTransaction]的 ...

  3. ThreadLocal 简述

    ThreadLocal的理解 Java中的ThreadLocal类允许我们创建只能被同一个线程读写的变量.因此,如果一段代码含有一个ThreadLocal变量的引用,即使两个线程同时执行这段代码,它们 ...

  4. Oracle创建表时Storage参数具体含义

    本文通过图表和实例的阐述在Oracle数据库创建新表时Storage的参数具体含义. 可用于:表空间.回滚段.表.索引.分区.快照.快照日志 参数名称 缺省值 最小值 最大值 说明 INITIAL 5 ...

  5. 有了Openvswitch和Docker,终于可以做《TCP/IP详解》的实验了!

    所有做过网络编程的程序员,想必都会看<TCP/IP详解>卷一:协议 后来出了第二版,但是由于第一版才是Rechard Stevens的原版,本人还是多次看了第一版. 对这一版印象最深的就是 ...

  6. FFMpeg首次使用

    FFMpeg在Windows上的使用.去FFMpeg官网上去下载文件. 把下载好的文件放如下图所示的位置. cmd,调出系统的命令行工具.首先进入d盘. 进入到ffmpeg所在的文件夹. 运行 ffm ...

  7. 3.1 if 条件分支语句

    Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 获取条件语句的执行结果的过程就是真假值判断 #首先需要说明在Python中 #假值(False):0. ...

  8. Java集合框架(六)—— Collections工具类

    操作集合的工具类Collections Java提供了一个操作Set.List和Map等集合的工具类:Collections,该工具类里提供了大量方法对集合元素进行排序.查询和修改等操作,还提供了将集 ...

  9. Qt 如何使用 lambda 表达式连接信号和槽?

    connect(camera, static_cast<void(QCamera::*)(QCamera::LockStatus, QCamera::LockChangeReason)>( ...

  10. the c programing language 学习过程5

    lumped 集成总结 mandating托管 consecutively连续地 contiguous临近的 mnemonic记忆力的 mimics 酷似 魔方 bind捆绑 synonym同义词 s ...