【问题标题】:Using range operator with a step将范围运算符与步骤一起使用
【发布时间】:2015-11-24 11:16:31
【问题描述】:

PowerShell 范围运算符生成值列表:

>1..6

1
2
3
4
5
6

如何生成包含特定步骤的值列表?例如,我需要一个从 1 到 10 的列表以及第 2 步。

【问题讨论】:

    标签: powershell powershell-2.0 higher-order-functions array-map


    【解决方案1】:

    范围运算符本身不支持跳过/步进,但您可以使用Where-Object(如果您运行的是 4.0 或更高版本,则可以使用 Where() 方法)过滤掉每秒:

    PS C:\> (1..10).Where({$_ % 2 -eq 0})
    2
    4
    6
    8
    10
    

    2.0 及以上版本:

    PS C:\> 1..10 |Where-Object {$_ % 2 -eq 0}
    2
    4
    6
    8
    10
    

    【讨论】:

    • 了解,但我的 powershell 对已发布的示例返回错误。更新代码(1..10) | where ({$_ % 2 -eq 0}) 返回正确结果
    • @constructor:我想调用扩展方法的能力是 PowerShell 5 中的新功能。到目前为止,我还没有看到或使用过它。我还认为大多数 PowerShell 代码不应该使用 LINQ,而应该使用相应的 cmdlet。
    • 啊,您正在运行 PowerShell 2.0?如果是这样,Where() 方法不存在,但是是的,如前所述,Where-Object cmdlet 也可以正常工作
    • 哦,很高兴知道。我有点忘记了新的语言功能。
    • 我想知道为什么没有人评论这实际上与所要求的有点不同。这些步骤应该从原始位置偏移,而不是从0 偏移,这是对范围内步骤的常见解释。在这种特定情况下,可能应该将答案中的条件更新为($_-<first-element>) % 2 -eq 01..10 |Where-Object {($_-1) % 2 -eq 0}
    猜你喜欢
    • 2015-11-01
    • 1970-01-01
    • 2022-08-14
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 2017-11-17
    • 2013-09-10
    • 1970-01-01
    相关资源
    最近更新 更多