我有一个NameValueCollection,我想根据他的价值对此进行排序。有没有人有一些想法如何轻松地做到这一点? 我想把它包装成SortedList或SortedDictionairy,但我不知道如何开始。
泰斯
答案 0 :(得分:4)
使用LINQ:
var sorted = nvc.OrderBy(kvp => kvp.Value);
答案 1 :(得分:1)
我认为解决方案的复杂性取决于您是否关心每个键的多个值。如果您只需要为每个键排序第一个值,则以下应将排序结果作为IEnumerable<KeyValuePair<string, string>>
返回:
var sorted = nvc.AllKeys.OrderBy(key => nvc[key])
.Select(key => new KeyValuePair<string, string>(key, nvc[key]));
如果您关心每个键的多个值,则可能必须在排序之前将每个值拆分为KeyValuePair。类似的东西:
var sorted = nvc.AllKeys
.SelectMany(key =>
nvc.GetValues(key)
.Select(val => new KeyValuePair<string, string>(key, val)))
.OrderBy(kvp => kvp.Value);
假设:
var nvc = new NameValueCollection() {
{ "key1", "c" },
{ "key1", "a" },
{ "key2", "b" }
};
第一个示例应返回以下IEnumerable<KeyValuePair<string, string>>
:
key2: b
key1: c,a
第二个示例应返回以下IEnumerable<KeyValuePair<string, string>>
:
key1: a
key2: b
key1: c