排序字典清单 [英] Sort List of Dictionaries
本文介绍了排序字典清单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个需要排序的字典值(一个List<>
)集合.基本上每个字典都是一个行",而集合是一个行的页面.一个简单的例子;
I have a collection of dictionary values (a List<>
) that I need to sort. Basically each dictionary is a 'row' and the collection is a page of rows. A simple example;
var data = new List<Dictionary<string,string>>();
data.Add(new Dictionary<string,string>() {
{ "Firstname", "Bob"},
{ "Lastname", "Banana"}
});
data.Add(new Dictionary<string, string>() {
{ "Firstname", "Amy"},
{ "Lastname", "Apple"}
});
data.Add(new Dictionary<string, string>() {
{ "Firstname", "Charlie"},
{ "Lastname", "Coconut"}
});
data.Add(new Dictionary<string, string>() {
{ "Firstname", "Andy"},
{ "Lastname", "Apple"}
});
生成的排序字符串是"SQL",例如
The sort string generated is "SQL" like, example
Lastname asc, Firstname desc
我已经在数据对象上尝试过.OrderBy()
,但是似乎不适用于KeyValuePairs.
I have tried .OrderBy()
on the data object but that doesn't seem to work right against the KeyValuePairs.
任何想法,我都可以使用动态排序语句来获得要按此顺序排序的数据列表:
Any idea how I could get the data list to be sorted to be in this order, using the dynamic sort statement:
Apple, Andy
Apple, Amy
Banana, Bob
Coconut, Charlie
如果某些精美的LINQ可以使用,请使用.NET 4.0.感谢您的任何建议.
Using .NET 4.0 if some fancy LINQ will work. Thanks for any suggestions.
推荐答案
private static IEnumerable<Dictionary<string, string>> Sort(IEnumerable<Dictionary<string,string>> data, string orderByString)
{
var orderBy =
orderByString.Split(',').Select(
s => s.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries))
.Select (a => new {Field=a[0],Descending = "desc".Equals (a[1], StringComparison.InvariantCultureIgnoreCase)})
.ToList ();
if (orderBy.Count == 0)
return data;
// First one is OrderBy or OrderByDescending.
IOrderedEnumerable<Dictionary<string, string>> ordered =
orderBy[0].Descending ? data.OrderByDescending (d => d[orderBy[0].Field]) : data.OrderBy (d => d[orderBy[0].Field]);
for (int i = 1; i < orderBy.Count; i++)
{
// Rest are ThenBy or ThenByDescending.
var orderClause = orderBy[i];
ordered =
orderBy[i].Descending ? ordered.ThenByDescending(d => d[orderClause.Field]) : ordered.ThenBy(d => d[orderClause.Field]);
}
return ordered;
}
这篇关于排序字典清单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文