Powershell连接数组值



我正在寻找数组的交叉组合值来创建新的数组。例如,

$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" } }

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

相关内容

  • 没有找到相关文章

最新更新