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

本文关键字:数据 关键字 排序 字典 | 更新日期: 2023-09-27 18:14:29

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

提前感谢。。

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

您可以直接将其转换为类似字典的:

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);

您只需要

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

然而,这并没有真正的帮助,因为order by子句不会影响字典的顺序。

你可能想要一个SortedDictionary?

new Dic = new SortedDictionary(dictionaryColl);

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

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

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

您可以使用

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是否具有基于键的排序字典。