我正在寻找数组的交叉组合值来创建新的数组。例如,
$a = @('Blue','red','green')
$b = @('car', 'bike')
变成
('blue car','red car','green car')
和('blue bike','red bike','green bike')
PS:这不是简单的连接功能,我正在寻找。
谢谢,Nilay
$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隐式地将循环的所有输出收集到数组([object[]]
;假设有两个或多个输出)。
数组连接的一般信息:
要创建一个平面数组,只需使用+
:
# Creates a flat array with 5 elements:
# @('Blue', 'red', 'green', 'car', 'bike')
$a + $b
要创建一个双元素嵌套的数组,使用,
的一元形式,即数组构造算子:
# -> Nested 2-element array:
# * Element 0 contains @('Blue', 'red', 'green')
# * Element 1 contains: @('car', 'bike')
, $a + , $b
作为题外话:请注意,您并不严格需要@(...)
,数组子表达式操作符来创建数组字面量;例如,$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" } }
+=
运算符不是很有效。它将为每次迭代创建结果的新实例。这可能适用于小输入数组。