如何找到多维数组的最小值和最大值?

时间:2013-01-31 17:26:05

标签: vb.net multidimensional-array

我想找到这个数组的最小值和最大值。在某些时候它被设置为(512, 512) UShorts。 For循环对于这么多点非常耗时并且正在寻找更清洁的东西。 SelectMany发生在我身上,但我不知道如何实现它。

Dim usResult As UShort(,)

编辑: 我试过了

Dim minValue As UShort = UShort.MaxValue
Dim maxValue As UShort = UShort.MinValue
Dim sw As New Stopwatch()
sw.Start()
For i As Integer = 0 To 511 Step 1
    For j As Integer = 0 To 511 Step 1
        minValue = Math.Min(usResult(i, j), minValue)
        maxValue = Math.Max(usResult(i, j), maxValue)
    Next
Next
sw.Stop()
Console.WriteLine(sw.ElapsedMilliseconds)
' This takes 2 to 3 milliseconds

2 个答案:

答案 0 :(得分:3)

获取多维数组的最小值/最大值的最简单方法是:

Dim max As UShort = usResult.Cast(Of UShort).Max()
Dim min As UShort = usResult.Cast(Of UShort).Min()

虽然它没有提供比for循环更好的性能。您需要使用专门的数据结构来保持元素排序,或跟踪最小/最大元素,以获得更好的性能。

答案 1 :(得分:1)

for循环可能比您预期的耗时少得多。尝试计时它以查看使用嵌套循环查找最小和最大100,000次所需的时间。