【问题标题】:Sort Dictionary based on keys根据键对字典进行排序
【发布时间】:2011-12-11 03:36:25
【问题描述】:

我需要根据键在 VB.net 中订购字典。键和值都是字符串。字典没有.Sort()。有没有办法做到这一点而不必编写我自己的排序算法?

【问题讨论】:

  • “订购字典”对您意味着什么?
  • 我对其进行了修改以澄清这一点,但它已被编辑。我需要根据它们的键订购字典。
  • 不,你看,你还没有说出“订购字典”的意思。告诉我你想要它基于键并不能解释“订购字典”对你意味着什么。
  • @Jason 我认为在这个问题的上下文中,对我来说“订购字典”显然意味着我想对其进行排序。
  • 对您来说“排序”字典有什么用?你想以某种方式改变字典以使其“排序”吗?您是否只想生成键的顺序?您想对值进行排序吗?您想生成键/值对的排序吗?你想产生一个全新的数据结构来封装“排序”吗?你看,你有字典。 “排序”的概念相当模糊,特别是因为 .NET 中的 Dictionary<TKey, TValue> 结构不保留任何排序。

标签: vb.net sorting dictionary


【解决方案1】:

SortedDictionary 浮现在脑海中,但它仅按键排序。

否则,这个答案可能会对How do you sort a C# dictionary by value? 有所帮助。

【讨论】:

    【解决方案2】:

    如果您需要保留底层字典而不使用 SortedDictionary,您可以使用 LINQ 根据您需要的任何条件返回一个 IEnumerable:

    Dim sorted = From item In items
                 Order By item.Key
                 Select item.Value
    

    SortedDictionary 在重复使用的情况下可能会提供更高的性能,但只要您将来不需要反转该排序。

    【讨论】:

      【解决方案3】:

      正是在 vb.net 中使用此代码:

              Dim myDict As New Dictionary(Of String, String)
              myDict.Add("one", 1)
              myDict.Add("four", 4)
              myDict.Add("two", 2)
              myDict.Add("three", 3)
      
              Dim sortedDict = (From entry In myDict Order By entry.Value Ascending).ToDictionary(Function(pair) pair.Key, Function(pair) pair.Value)
      
              For Each entry As KeyValuePair(Of String, String) In sortedDict
                  Console.WriteLine(String.Format("{0,10} {1,10}", entry.Key, entry.Value))
              Next
      

      【讨论】:

      • 根据 OP 的编辑,我认为您想要 Order By entry.Key 而不是 entry.Value
      • 对于 entry.Key 我们可以使用 SortedDictionary 没有任何 LINQ 表达式
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-11
      • 1970-01-01
      • 2015-11-23
      • 1970-01-01
      • 2013-09-27
      • 2018-08-13
      相关资源
      最近更新 更多