1

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

蒂斯

4

2 回答 2

4

使用 LINQ:

var sorted = nvc.OrderBy(kvp => kvp.Value);
于 2011-10-18T15:04:06.523 回答
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
于 2012-07-29T00:11:26.450 回答