Arrays PowerShell中最大阵列成员数

Arrays PowerShell中最大阵列成员数,arrays,powershell,Arrays,Powershell,正在学习PowerShell,这里有一个问题: 我需要一个最大数组成员的订单号。 与数组1、2、5、3、4一样,最大的是成员3。 谢谢 您可以使用单个函数或一步一步来完成,让我们看看第一步一步版本 给定整数数组$a,首先需要找到最大值: $maximum = ($a | Measure -Max).Maximum 请注意,度量对象将返回一个Double,因此稍后需要将其强制转换为Int32。现在,您需要搜索该值第一次出现的索引是: $index = [Array]::IndexOf($a, [

正在学习PowerShell,这里有一个问题: 我需要一个最大数组成员的订单号。 与数组1、2、5、3、4一样,最大的是成员3。
谢谢

您可以使用单个函数或一步一步来完成,让我们看看第一步一步版本

给定整数数组$a,首先需要找到最大值:

$maximum = ($a | Measure -Max).Maximum
请注意,度量对象将返回一个Double,因此稍后需要将其强制转换为Int32。现在,您需要搜索该值第一次出现的索引是:

$index = [Array]::IndexOf($a, [int]$maximum)
请注意,如果希望最后一个元素的索引具有最大值,则可以使用LastIndexOf替换IndexOf。例如,给定一个数组1,3,3,3,使用IndexOf可以得到1,使用LastIndexOf可以得到4,不要忘了数组是基于0的

如果需要,您可以将所有内容放在一行中:

$index = [Array]::IndexOf($a, [int](($a | Measure -Max).Maximum))
您还可以使用LINQ:

$index = [Array]::IndexOf($a, [System.Linq.Enumerable]::Max([int[]]$a)
让我们为这个做一个函数让我说些冗长的话:

function IndexOfMaximum($a)
{
    $maximum = $null
    $indexOfMaximum = -1

    for ($i = 0; $i -lt $a.Length; ++$i)
    {
        if ($maximum -eq $null -or $a[$i] -gt $maximum)
        {
            $maximum = $a[$i]
            $indexOfMaximum = $i
        }
    }

    return $indexOfMaximum
}
要像这样使用:

IndexOfMaximum($a)
注意:问题应该显示解决问题的尝试,我将此答案发布为社区Wiki,因为我认为PowerShell示例永远不够。。。

我以为最大的数字是5,它的索引是2……我的错,忘记从0开始计数,而不是从1开始。不管怎样,如何得到这个指数?问答意味着问题和答案。如果你想得到答案,首先要努力制定一个问题。非常感谢!正是我要找的!