PowerShell中最大数组成员的数量

时间:2014-07-30 10:23:21

标签: arrays powershell

刚学习PowerShell,这是一个问题: 我需要一个最大阵列成员的订单号。 与阵列1,2,5,3,4一样,最大的是成员3。 谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用单个功能或一步一步完成,让我们先看一步一步的版本。

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

$maximum = ($a | Measure -Max).Maximum

请注意,Measure-Object会返回Double,因此稍后需要将其转换为Int32。现在,您需要搜索该值的第一个出现位置:

$index = [Array]::IndexOf($a, [int]$maximum)

请注意,如果您希望最后一个元素的索引具有最大值,则可以将IndexOf替换为LastIndexOf(例如,给定一个数组(1,3,3,2,3)并使用IndexOf,您可以&#39 ;得到1LastIndexOf你得到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示例永远不够......