1

我正在使用字典来收集一些信息。收集详细信息后,我需要使用 var 变量根据键对字典值进行排序。之后,我需要将排序后的 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

提前致谢..

4

5 回答 5

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);
于 2013-05-20T12:10:10.290 回答
3

您只需要

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

但是,这并没有太大帮助,因为 order by 子句不会影响字典顺序。

您可能想要一个SortedDictionary吗?

new Dic = new SortedDictionary(dictionaryColl);
于 2013-05-20T12:10:23.063 回答
0

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

于 2013-05-20T12:15:47.767 回答
0
newDic =(Dictionary<int,string>).OrderBy(l => l.ColName).ToList();

ColName您要应用排序或排序的列的名称在哪里。

于 2013-05-20T12:21:47.930 回答
-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 是否具有基于键的排序字典。

于 2013-05-20T12:15:19.033 回答