如何在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
提前感谢。。
您可以直接将其转换为类似字典的:
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是否具有基于键的排序字典。