4

我想找到这个数组的最小值和最大值。在某些时候,它被设置为(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
4

2 回答 2

3

获取多维数组的最小值/最大值的最简单方法是执行以下操作:

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

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

于 2013-01-31T18:47:29.280 回答
1

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

于 2013-01-31T18:03:15.580 回答