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 に答える