功能等效连接多个不同长度列表中的项目

时间:2017-10-13 01:01:13

标签: powershell functional-programming

这个命令式代码的功能样式是什么? (这恰好是Powershell,但我对Powershell和语言无关的解决方案感兴趣。)

$part1=1,2
$part2='a','b','c'
$part3=1,2,3,4
[System.Collections.ArrayList]$n= @()

foreach($x in $part1)
{
    foreach($y in $part2)
    {
        foreach($z in $part3)
        {
            $n.Add("$x$y$z")
        }
    }
}

$n

这里有一些在Powershell中进行map,filter和reduce的简单提示,表明功能样式是可行的: http://peterreavy.com/tech/2014/04/30/Map,-reduce-and-filter-in-PowerShell.html

编辑:所需的输出是包含24个项目的集合: 1a1,1a2,1a3,1a4,1b1,1b2,1b3,1b4,1c1,1c2,1c3,1c4, 2a1,...,2a4,2b1,...,2c4

1 个答案:

答案 0 :(得分:1)

不确定您要找的是什么,但您可以这样写:

$part1=1,2
$part2='a','b','c'
$part3=1,2,3,4

$n = $part1 | % {$a=$_;$part2 | %{$b=$_;$part3 | % {"$a$b$_"}}}

备注:

您可以在powershell中编写这样的代码。 @()是一个集合,+=对添加项目的集合进行操作。请注意$n.Add("$x$y$z")返回一个整数。

$part1=1,2
$part2='a','b','c'
$part3=1,2,3,4
$n= @()

foreach($x in $part1)
{
    foreach($y in $part2)
    {
        foreach($z in $part3)
        {
            $n += "$x$y$z"
        }
    }
}
$n