Powershell功能zip等效

Powershell功能zip等效,powershell,Powershell,是否存在与函数式编程中的“zip”等效的PowerShell 我想获取两个输入序列并返回一个包含成对元素的元组序列。 有没有一种内置的方法或语言内置的东西使这变得容易 顺便说一句,我希望PowerShell的解决方案非常“自然”,并与管道集成。有点麻烦,但它可以工作: 脚本文件test.ps1: param( $fnop, $first, $second) $retval = @() $len = if($first.length -lt $second.length) { $first.le

是否存在与函数式编程中的“zip”等效的PowerShell

我想获取两个输入序列并返回一个包含成对元素的元组序列。 有没有一种内置的方法或语言内置的东西使这变得容易


顺便说一句,我希望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解决方案,我现在还不知道。所以我没有在这里做任何保证-编辑完成后,先前删除的注释不再有意义。