获取数组中最大整数的索引

时间:2011-05-24 18:33:50

标签: vb.net arrays

我有一个整数数组,我需要知道最大数字的索引(不是实际值,只是最高的索引)。

但是,如果一个或多个索引“绑定”最高值,我需要拥有共享该高值的所有索引。

我认为这个函数需要返回一个数组(因为它可能是一个或多个索引),但我不完全确定如何获得更高效的解决方案。

3 个答案:

答案 0 :(得分:2)

如果这是一个常见的事情,你可以编写自己的扩展。你应该添加一些额外的健全/空检查,但这会让你开始:

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

答案 1 :(得分:0)

如果您使用的是.NET 3.5,则可以使用Max()扩展功能轻松找到最高值,并使用“在何处找到源阵列中的匹配记录”。

答案 2 :(得分:0)

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