【问题标题】:math.min and math.max vs sort for efficiently finding values in a listmath.min 和 math.max vs sort 用于有效地在列表中查找值
【发布时间】:2015-04-05 21:50:29
【问题描述】:

在 Visual Basic 中,当尝试在列表中查找最大值和最小值时,使用 math.min/max 是否更有效:

Dim highest As Decimal = Decimal.MinValue
Dim lowest As Decimal = Decimal.MaxValue

For Each item As Decimal In listNumber
    highest = Math.Max(highest, item)
    lowest = Math.Min(lowest, item)
Next

或对列表进行排序并按索引获取值,如下所示:

listNumber.Sort()
listNumber(0)
listNumber(99)

看起来使用 min/max 是首选方法,但对于包含 100 个十进制值的列表,它们似乎都足够好,一个比另一个更有效,或者这只是 6 对半打的东西?

我试图找到一种在 Visual Studio 2013 Express 中对此进行基准测试的方法,但看起来我必须升级到 Visual Studio Ultimate,我错过了什么吗?

【问题讨论】:

  • “我试图找到一种方法在 Visual Studio 2013 Express 中对此进行基准测试,但看起来我必须升级到 Visual Studio Ultimate,我错过了什么吗?” 你只需要使用System.Diagnostics.Stopwatch 和一个有意义的测试。但我可以告诉你,你正在进行微优化。使用最具可读性和可维护性的代码 listNumber.Min()listNumber.Max()
  • @TimSchmelter 谢谢,总的来说这真的很有帮助,但在这种情况下,它们似乎都以 1 毫秒运行
  • @apaul34208:编译器可能会为这些方法中的每一个生成类似的输出。您的方法和内置方法之间的任何差异都可以通过更大的样本量来实现。但是,您应该尽可能使用内置方法,因为它们更有可能是此类情况的最佳选择。你不应该尝试微优化,除非你的用例以某种方式证明它是合理的。

标签: vb.net list sorting max min


【解决方案1】:

对物品进行排序意味着您不仅可以找出最大和最小的物品,还可以根据价值排列介于两者之间的所有物品。虽然做起来很简单,但仍然是额外的工作,你不必让计算机去做。

您可以使用MinMax 方法来获得所需的内容,就像对列表进行排序一样容易:

Dim highest As Decimal = listNumber.Min()
Dim lowest As Decimal = listNumber.Max()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    相关资源
    最近更新 更多