迭代数组并修改PowerShell中的元素的最佳方法是什么?

时间:2012-03-14 06:11:17

标签: powershell iteration

我知道Ruby有一个map!方法可以做到这一点。在PowerShell中,我目前所做的是:

$new_array = @();
$array | % {
    $new_array += <do something with the currently element $)>;
}
$array = $new_array;

我想知道最好的方法。谢谢!

2 个答案:

答案 0 :(得分:6)

最简单的我能想到的是

$array | %{ $_ + 1 }

$_ + 1是我想要的转变。

所以你可以这样做:

$new = $array | %{$_ + 1}

$array = $array | %{ $_ + 1} 

PS: 如果需要,可以定义地图功能:

function map ([scriptblock]$script, [array] $a) {

    $a | %{ & $script $_ }

}

map {param($i) $i + 1} 1,2,3

或者在System.Array上编写扩展方法:http://blogs.msdn.com/b/powershell/archive/2008/09/06/hate-add-member-powershell-s-adaptive-type-system.aspx

答案 1 :(得分:0)

您也可以使用过滤器:

$arr = 1,2,3

 filter addone {$_ +1}
 $arr | addone

或过滤功能:

function addone {process{$_ +1}}
$arr | addone

或匿名过滤器:

$addone = {$_ +1}
$addone.isfilter = $true
$arr | &$addone

编辑:匿名过滤器工作的日期可能已编号。在V3测试版不再适用,我怀疑这不会改变。看起来脚本块在创建后就会被编译,并且.isfilter属性在编译后无法更改。