【问题标题】:Sorting a NameValueCollection by value in c#在 c# 中按值对 NameValueCollection 进行排序
【发布时间】:2011-12-10 04:47:04
【问题描述】:

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

提斯

【问题讨论】:

标签: c# collections multidimensional-array sorting namevaluecollection


【解决方案1】:

使用 LINQ:

var sorted = nvc.OrderBy(kvp => kvp.Value);

【讨论】:

  • 好的,这看起来很简单,但我真的不明白如何将它变成一个集合。你能扩展一下你的代码吗?
  • @Thijs - sorted 是一个集合。
  • @Thijs - 我的回答有问题吗?
  • @Thijs - 不,它没有。这就是为什么我说使用LINQ。您需要在文件中添加 using System.Linq; 指令。 OrderBy 扩展方法在那里定义。
  • 哦,有道理。我会用那个:)
【解决方案2】:

我认为解决方案的复杂性取决于您是否关心每个键的多个值。如果您只需要对每个键的第一个值进行排序,则以下内容应将排序结果返回为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&lt;KeyValuePair&lt;string, string&gt;&gt;

key2: b
key1: c,a

第二个示例应返回以下IEnumerable&lt;KeyValuePair&lt;string, string&gt;&gt;

key1: a
key2: b
key1: c

【讨论】:

    猜你喜欢
    • 2010-10-11
    • 2021-09-16
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 2012-04-28
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多