我正在使用字典来收集一些信息。收集细节后,我需要使用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
先谢谢..
答案 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是否具有已排序的字典。