我有一個整數數組,我需要知道最大數字的索引(不是實際值,只是最高的索引)。獲取數組中最大整數的索引
但是,如果一個或多個索引「綁定」最高值,我需要擁有所有分享該高價值的索引。
我認爲這個函數需要返回一個數組(因爲它可能是一個或多個索引),但我不完全知道如何去獲得更高效的解決方案。
我有一個整數數組,我需要知道最大數字的索引(不是實際值,只是最高的索引)。獲取數組中最大整數的索引
但是,如果一個或多個索引「綁定」最高值,我需要擁有所有分享該高價值的索引。
我認爲這個函數需要返回一個數組(因爲它可能是一個或多個索引),但我不完全知道如何去獲得更高效的解決方案。
如果這將是一件普通的事情,您可以編寫自己的擴展。你應該添加一些額外的理智/ null的檢查,但是這將讓你開始:
Module Extensions
<System.Runtime.CompilerServices.Extension()> Function FindAllIndexes(Of T)(ByVal array() As T, ByVal match As Predicate(Of T)) As Integer()
''//Our return object
Dim Ret As New List(Of Integer)
''//Current array index
Dim I As Integer = -1
''//Infinite loop, break out when we no more matches are found
Do While True
''//Loop for a match based on the last index found, add 1 so we dont keep returning the same value
I = System.Array.FindIndex(array, I + 1, match)
''//If we found something
If I >= 0 Then
''//Append to return object
Ret.Add(I)
Else
''//Otherwise break out of loop
Exit Do
End If
Loop
''//Return our array
Return Ret.ToArray()
End Function
End Module
然後調用它:
Dim ints As Integer() = New Integer() {1, 2, 8, 6, 8, 1, 4}
Dim S = ints.FindAllIndexes(Function(c) c = ints.Max())
''//S now holds 2 and 4
IList中有一個成員的IndexOf,這有助於。此代碼完全未經測試,可能至少有一個錯誤。
Public Function GetPostionsOfMaxValue(ByVal input() As Integer) As Integer()
Dim ints = New List(Of Integer)(input)
Dim maxval = ints.Max
Dim indexes As New List(Of Integer)
Dim searchStart As Integer = 0
Do Until searchStart >= ints.Count
Dim index = ints.IndexOf(maxval, searchStart)
If index = -1 Then Exit Do
indexes.Add(index)
searchStart = index + 1
Loop
Return indexes.ToArray
End Function
這工作像一個魅力。謝謝! – 2011-05-24 22:01:25