Powershell:将单个数组合并到列中

时间:2014-05-01 15:45:15

标签: powershell

假设:

$column1 = @(1,2,3)
$column2 = @(4,5,6)

如何将它们组合成一个对象$ matrix,它以单个数组为列显示为矩阵:

column1 column2
------- -------
   1       4
   2       5
   3       6

5 个答案:

答案 0 :(得分:5)

今天我的所有解决方案似乎都需要计算属性。尝试:

$column1 = @(1,2,3)
$column2 = @(4,5,6)

0..($column1.Length-1) | Select-Object @{n="Id";e={$_}}, @{n="Column1";e={$column1[$_]}}, @{n="Column2";e={$column2[$_]}}

Id Column1 Column2
-- ------- -------
 0       1       4
 1       2       5
 2       3       6

如果数组的长度不相等,您可以使用:

$column1 = @(1,2,3)
$column2 = @(4,5,6,1)

$max = ($column1, $column2 | Measure-Object -Maximum -Property Count).Maximum    

0..$max | Select-Object @{n="Column1";e={$column1[$_]}}, @{n="Column2";e={$column2[$_]}}

我不确定您是否需要Id,因此我将其包含在第一个示例中以显示如何包含它。

答案 1 :(得分:1)

好一点,也许:

$column1 = @(1,2,3)
$column2 = @(4,5,6,7)

$i=0
($column1,$column2 | sort length)[1] |
foreach {
  new-object psobject -property @{
                                    loess = $Column1[$i]
                                    lowess = $column2[$i++]
                                   }
  } | ft -auto

loess lowess
----- ------
    1      4
    2      5
    3      6
           7

答案 2 :(得分:0)

我想出了这个...但它似乎太冗长了。还有什么更短的?

&{
    for ($i=0; $i -lt $y.Length; $i++) {
        New-Object PSObject -Property @{
            y = $y[$i]
            loess = $smooth_loess[$i]
            lowess = $smooth_lowess[$i]
        }
    }
} | Format-Table -AutoSize

答案 3 :(得分:0)

以下是mjolinorFrode F.解决方案的组合。我使用select-object使用Frode的对象构造技巧遇到了一些问题。由于某种原因,它会输出可能代表对象引用的哈希值。我一年只在PowerShell中编写几次代码,所以我只是提供这个,以防其他人发现它有用(甚至可能是我未来的自我)。

$column1 = @(1,2,3)
$column2 = @(4,5,6,7)
$column3 = @(2,5,5,2,1,3);

$max = (
    $column1,
    $column2,
    $column3 |
        Measure-Object -Maximum -Property Count).Maximum;

$i=0

0..$max |
foreach {
  new-object psobject -property @{
                                    col1 = $Column1[$i]
                                    col3 = $column3[$i]
                                    col2 = $column2[$i++]
                                   }
  } | ft -auto

答案 4 :(得分:0)

这是我今天创建的东西。它的取值范围为0到列长度之一,然后将其映射到哈希列表。使用选择将其转换为适当的表格。

$table = 0..$ColA.Length | % { @{
    ColA = $ColA[$_]
    ColB = $ColB[$_]
}} | Select ColA, ColB

使用以下变量:

$ColA = @(1, 2, 3)
$ColB = @(4, 5, 6)

结果

ColB ColA
---- ----
   1    4
   2    5
   3    6