【问题标题】:Powershell join array valuesPowershell 连接数组值
【发布时间】:2021-10-24 02:01:28
【问题描述】:

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

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

类似

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

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

谢谢, 尼莱

【问题讨论】:

    标签: arrays powershell cross-product


    【解决方案1】:
    $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 隐式收集循环中的所有输出到一个 array (@ 987654330@;假设两个或更多个输出)。


    关于数组连接的一般信息

    要创建一个 flat 数组,通过串联,只需使用+

    # 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' 可以。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多