按c#中的值对NameValueCollection进行排序

时间:2011-10-18 15:02:56

标签: c# collections multidimensional-array sorting namevaluecollection

我有一个NameValueCollection,我想根据他的价值对此进行排序。有没有人有一些想法如何轻松地做到这一点? 我想把它包装成SortedList或SortedDictionairy,但我不知道如何开始。

泰斯

2 个答案:

答案 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