2014-07-01 80 views
0

在我的C#程序中我有一个名单,我用字典元素填充C#列表:排序基于字典的元素

List<Dictionary<string, object>> mylist = new List<Dictionary<string, object>>(); 
Dictionary<string, object> d1 = new Dictionary<string, object>(); 
d1.Add("val1", 1); 
d1.Add("val2", 2); 
d1.Add("val3", 3); 
mylist.Add(d1); 
Dictionary<string, object> d2 = new Dictionary<string, object>(); 
d2.Add("val1", 4); 
d2.Add("val2", 5); 
d2.Add("val3", 6); 
mylist.Add(d2); 
Dictionary<string, object> d3 = new Dictionary<string, object>(); 
d3.Add("val1", 7); 
d3.Add("val2", 8); 
d3.Add("val3", 9); 
mylist.Add(d3); 

我想根据字典中的元素一定的元素对列表进行排序,例如,根据字典中的“val3”对象对列表进行排序。我试过这个: mylist.OrderBy(x => x [“val3”]); 我的列表顺序仍然相同。任何想法我做错了什么?谢谢

+0

'OrderBy'会给你一个新的IEnumerabe ...尝试'MYLIST = mylist.OrderBy(..)ToList ()' – Carsten

+0

'因为这是正确的顺序。尝试OrderByDescending。并且'是',OrderBy的结果是您应该操作的另一个IEnumarable。 –

+0

正如@ArtyomKharlamov所说,你所说的价值观已经按你想要的顺序。也许你在等别的东西?你想保留订购的字典吗?如果没有,你可以使用一个SelectMany,然后通过键 – Gonzix

回答

3

可能你还没有分配OrdeyBy返回的结果。你可以这样做:

mylist = mylist.OrderBy(x => x["val3"]).ToList(); 

这将命令你的元素,把它们放到一个新的列表中。

你也可以做到这一点,而无需创建一个新的列表,使用List<T>.Sort方法:

mylist.Sort((x,y) => ((IComparable)x["val3"]).CompareTo(y["val3"])); 
+0

排序不会抛出一个异常,因为该对象? – Gonzix

+0

@Gonzix你是对的,我们需要把它'IComparable'。 –