Powershell功能zip等效
是否存在与函数式编程中的“zip”等效的PowerShell 我想获取两个输入序列并返回一个包含成对元素的元组序列。 有没有一种内置的方法或语言内置的东西使这变得容易Powershell功能zip等效,powershell,Powershell,是否存在与函数式编程中的“zip”等效的PowerShell 我想获取两个输入序列并返回一个包含成对元素的元组序列。 有没有一种内置的方法或语言内置的东西使这变得容易 顺便说一句,我希望PowerShell的解决方案非常“自然”,并与管道集成。有点麻烦,但它可以工作: 脚本文件test.ps1: param( $fnop, $first, $second) $retval = @() $len = if($first.length -lt $second.length) { $first.le
顺便说一句,我希望PowerShell的解决方案非常“自然”,并与管道集成。有点麻烦,但它可以工作: 脚本文件test.ps1:
param( $fnop, $first, $second)
$retval = @()
$len = if($first.length -lt $second.length) { $first.length } else { $second.length }
for( $i = 0; $i -lt $len; $i++) {
$oprslt = $fnop.invoke( $first[$i], $second[$i])
$retval = $retval + $oprslt
}
$retval
例如:
# add and sort
PS> .\test.ps1 {param($a,$b) return $a+$b} (3,2,1) (8,-4,5) | sort
11
-2
6
# add only
PS> .\test.ps1 {param($a,$b) return $a+$b} (3,2,1) (8,-4,5)
-2
6
11
# multiply and sort
PS> .\test.ps1 {param($a,$b) return $a*$b} (3,2,1) (8,-4,5) | sort
-8
5
24
函数块{param$a,$b return$a+$b}是您的zip函数。我只想指出,您可以在Powershell中本机使用元组: $q=[System.Tuple]::创建'One','Two' $q.Item1 $q.Item2
这不一定对你有帮助,甚至对这种情况没有意义,但我想你可能会感兴趣。这个请求不时出现。惯用的PowerShell解决方案是一个Join对象命令。PowerShell团队在他们的博客上写了这个脚本以及一些使用它的例子-谢谢@JensG,我会研究这个。我喜欢您将函数作为第一个参数传入的方式,这很有意义。您认为从管道中接受$first和$second参数更像PowerShell吗?我尝试编写一个使用管道的版本,但在使用它之前,我收集了所有管道输入,因此它基本上与您的函数相同。可能有一个更好或更地道的PowerShell解决方案,我现在还不知道。所以我没有在这里做任何保证-编辑完成后,先前删除的注释不再有意义。