【问题标题】:VB.net, How to sort collection items by valueVB.net,如何按值对集合项进行排序
【发布时间】:2013-06-04 16:47:53
【问题描述】:

如何在 VB.NET 中按值对集合项进行排序?

我想对此进行排序:

Dim col as Collection = New Collection
col.Add("b","b1")
col.Add("a","a1")
col.Add("d","d1")

【问题讨论】:

  • 你必须使用集合还是泛型也可以?
  • 真可惜。 Dictionary 在这里会更加灵活。
  • 好的,让我们使用字典

标签: vb.net visual-studio-2010 sorting


【解决方案1】:

就像@Krishnadditya 提到的那样,集合并不适合排序,因为它们包含Object 类型的项目,这太通用了,无法相互比较。如果您没有与集合结婚,您可以使用 LINQ 查询到列表或任何可以转换为可枚举的东西来完成此操作

Dim list = {
        New With {.Object = "b", .Key = "b1"},
        New With {.Object = "a", .Key = "a1"},
        New With {.Object = "d", .Key = "d1"}}

Dim sortedList = _
        From item In list
        Order By item.Key

【讨论】:

    【解决方案2】:

    由于Collection.Add 采用通用对象类型而没有特定类型 - 无法进行排序。由于对象需要相互比较才能进行排序,这就像比较橙子和苹果一样。

    Collection 提供按 Key 而非 value 排序。

    我认为,您可能必须扩展 Collection 类并实现排序。您可以使用InsertRemoveAt 方法移动项目。

    只是一个想法/建议: 如果值是特定类型的,如何使用其他数据结构。就像link中提到的可以按值排序的字典一样@

    【讨论】:

    • 同意。或者使用可以打开许多选项的通用类型(例如字典)
    【解决方案3】:

    我决定使用字典:

    Dim newcol = (From entry In col 
                  Order By entry.Value Descending).ToDictionary(
                  Function(pair) pair.Key, 
                  Function(pair) pair.Value)
    

    【讨论】:

      猜你喜欢
      • 2021-01-15
      • 2015-10-18
      • 2017-05-02
      • 1970-01-01
      • 2017-11-20
      • 1970-01-01
      • 1970-01-01
      • 2021-03-13
      • 2010-09-27
      相关资源
      最近更新 更多