Powershell 连接数组值

Powershell join array values

我希望交叉组合数组的值来创建新数组。例如,

$a = @('Blue','red','green') 
$b = @('car', 'bike') 

类似于

('blue car','red car','green car')('blue bike','red bike','green bike')

PS:这不是我正在寻找的简单连接函数。

谢谢, 尼莱

$a = @('Blue', 'red', 'green') 
$b = @('car', 'bike') 

$outArrays = @(), @() # Initialize a 2-element array.
$i = 0
foreach ($elB in $b) {
  $outArrays[$i++] = foreach ($elA in $a) { "$elA $elB" }
}
  • $outArrays[0] 现在包含 'blue car', 'red car', 'green car'
  • $outArrays[1] 现在包含 'blue bike', 'red bike', 'green bike'

上面的代码利用了 PowerShell 将 foreach 等循环语句用作 表达式 的能力,PowerShell 隐式地收集了 [=36] 中循环的所有输出=]数组([object[]];假设两个或更多输出)。


关于数组连接的一般信息:

要通过连接创建一个平面数组,只需使用+:

# Creates a flat array with 5 elements:
#   @('Blue', 'red', 'green', 'car', 'bike')
$a + $b

要创建一个双元素 嵌套 数组,请使用 , 的一元形式,array constructor operator:

# -> Nested 2-element array:
# * Element 0 contains @('Blue', 'red', 'green')
# * Element 1 contains: @('car', 'bike')
, $a + , $b

顺便说一句:请注意,您并不严格需要 @(...), the array-subexpression operator 来创建数组文字;例如,
$a = 'Blue', 'red', 'green' 就行了。

您可以使用这种方法创建矩阵

# your input
$a = @('Blue','red','green') 
$b = @('car', 'bike')
# create an empty result array
$result = @()
# iterate the input arrays and add the items to the result
$b | ForEach-Object { $x=$_; $a | ForEach-Object { $result +=  "$_ $x" } }

+= 运算符效率不高。它将为每次迭代创建一个新的结果实例。这可能适用于小型输入数组。