如何根据C#中字典中的键对数据进行排序

时间:2013-05-20 12:07:29

标签: c# linq

我正在使用字典来收集一些信息。收集细节后,我需要使用var Variable基于键对字典值进行排序。    之后,我需要将已排序的var变量插入到新字典中。在这里,我很难将已排序的数据插入到字典中。

我在这里发布我的代码:

var  orderDic = from dic in dictionaryColl
                orderby dic.Key  ascending
                select dic;             
Dictionary<int, string> newDic = new Dictionary<int, string>();
newDic =(Dictionary<int,string>)orderDic;  // Here i'm not able to assign data to dictionary

先谢谢..

5 个答案:

答案 0 :(得分:4)

您可以直接将其转换为字典,如:

Dictionary<int, string> newDic  = (from dic in dictionaryColl
                                  orderby dic.Key ascending
                                  select dic)
                                 .ToDictionary(r => r.Key, r => r.Value);

或者使用方法语法:

Dictionary<int, string> newDic = dictionaryColl
                                .OrderBy(r => r.Key)
                                .ToDictionary(r => r.Key, r => r.Value);

编辑:OrderBy不会影响按顺序检索词典项目。

请参阅:Dictionary<TKey, TValue> Class

  

出于枚举的目的,字典中的每个项都被视为   表示值及其值的KeyValuePair结构   键。返回商品的顺序未定义。

您需要的是SortedDictionary,如:

SortedDictionary<int, string> sortedNewDic = 
           new SortedDictionary<int, string>(dictionaryColl);

答案 1 :(得分:3)

你只需要

newDic = orderDic.ToDictionary(x=> x.Key, x => x.Value);

然而,这并不会有多大帮助,因为order by子句不会影响字典顺序。

您可能需要SortedDictionary

new Dic = new SortedDictionary(dictionaryColl);

答案 2 :(得分:0)

为什么不首先使用SortedDictionary(http://msdn.microsoft.com/en-us/library/f7fta44c.aspx)?

答案 3 :(得分:0)

newDic =(Dictionary<int,string>).OrderBy(l => l.ColName).ToList();

其中ColName是您要应用排序或排序的列名称。

答案 4 :(得分:-2)

您可以使用

var _ordered = _dic.OrderBy(d => d.key).ToDictionary(d => d.Key, d => d.Value); 

按升序排序字典的方法。

你可以使用

var _ordered = _dic.OrderByDescending(d => d.key).ToDictionary(d => d.Key, d => d.Value); 

按降序排序字典的方法。

否则,如果你想替换相同的字典 那么

var _ordered = _dic.OrderByDescending(d => d.key).ToDictionary(d => d.Key, d => d.Value); 

如果您的原始词典是_dic

_dic=new Dictionary<int, string>(_ordered);

请仔细阅读以下代码,

class Program
{
    static void Main(string[] args)
    {
        Dictionary<int,string> _dic=new Dictionary<int,string>();
        _dic.Add(5,"xyz");
        _dic.Add(2,"abc");
        _dic.Add(1,"pqr");
        _dic.Add(4,"test");
        _dic.Add(3,"pvf");

        var _ordered=_dic.OrderBy(d => d.Key).ToDictionary(d=> d.Key,d=>d.Value);
        _dic=new Dictionary<int,string>(_ordered);
    }
}

您可以调试上述应用程序,并根据密钥检查_dic是否具有已排序的字典。