Powershell中的数组WON&#T;写成数组

时间:2014-12-22 18:06:25

标签: arrays powershell dynamic-arrays

无论我如何编写这个脚本,Powershel都不会编写我应该编写的数组,它会打印一个单行数组。

PS C:\Windows\system32> $matriz = @(
(1,2,3,4),
(5,6,7,8)
)

Write-Host $matriz
1 2 3 4 5 6 7 8

不是这样的:

PS C:\Windows\system32> $matriz = ,@((1,2,3,4),
(5,6,7,8))

Write-Host $matriz
1 2 3 4 5 6 7 8

如何将其打印为真正的二维矩阵? 并且...我正在尝试使用Get-Random填充此相同的数组,但它显示以下错误:Failed add the number where you want (i.e. matriz [0,1]) because it doesn't support fractions&lt; - 不是真实的消息,但你们不会理解葡萄牙语:/ < / p>

*更新:
我想把它打印成这样:
1 2 3 4
5 6 7 8
'因为单行的东西不会帮助我看看我的矩阵是否正确,作为单行我永远不会知道数组的对角线是什么。

3 个答案:

答案 0 :(得分:2)

因此,当您输出数组时,PowerShell默认输出新行上的每个数组项。这是获得我认为你想要的一种方式:

Write-Host $matriz | %{$_ -join ' '}

所以你告诉它继续使用外部数组的新行,但对于每个内部数组,使用空格连接它们。

答案 1 :(得分:0)

这使用了一个技巧但会使它打印成两行:

$matriz = ,@(1,2,3,4)+,@(5,6,7,8)
$matriz | % {Write-Host $_ }

输出是:

1 2 3 4
5 6 7 8

每个项目可以单独引用为$matriz[x][y],其中x,y是二维数组的大小(As Bacon说)。

答案 2 :(得分:0)

这就是二维数组的打印方式。如果您想以其他方式显示它,您需要自己格式化:

$matriz  = @((1,2,3,4),(5,6,7,8))

$matriz  | ForEach-Object {
    $_ | ForEach-Object {
        Write-Host ("{0,5}" -f $_) -NoNewline;
    }
    Write-Host;
}

您还没有正确调用矩阵元素。例如,$matriz[1,1]实际上意味着(,$matriz[1] + ,$matriz[1])。这是因为1,1本身就是一个数组。

正确查找单个元素需要做的是使用多个索引:$matriz[1][1]