如何在Powershell中创建一个空数组?

时间:2018-04-21 11:43:02

标签: arrays powershell

我想在Powershell中创建一个空数组,以保存"元组"值(数组是不可变的)。

因此我尝试了类似的事情:

$arr的类型为Object[]。我已经读过+= @(1,2)将给定元素(即@(1,2))附加到$arr(实际创建一个新数组)。但是,在这种情况下,似乎连接数组,为什么?

$arr = @()
$arr += @(1,2)
$arr.Length // 2 (not 1)

如果我这样做,似乎$arr包含两个数组@(1,2),@(3,4),这就是我想要的:

$arr = @()
$arr += @(1,2),@(3,4)
$arr.Length // 2

如何初始化一个空的数组数组,这样我就可以一次添加一个子数组,如$arr += @(1,2)

3 个答案:

答案 0 :(得分:5)

+运算符连接数组。要将数组作为单个元素添加,请在元素前添加逗号以添加。类似于@() + , (1,2) + , (3, 4)

答案 1 :(得分:2)

Bruce Payette的回答将起作用。语法对我来说似乎有点尴尬,但确实有效。至少它不是Perl。

另一种方法是使用ArrayList。对我来说,这种语法更清晰,更有可能在六个月内被其他开发人员(或我自己)理解。

[System.Collections.ArrayList]$al = @()

$al.Add(@(1,2))
$al.Add(@(3,4))

foreach ($e in $al) {
    $e
    $e.GetType()
}

答案 2 :(得分:1)

据我所知,您无法在PowerShell中本地执行此操作,也无法使用[System.Array]类型执行此操作。在这两种情况下,您似乎都需要定义数组的长度和类型。因为我想要一个完全空的数组数组,并且能够在数组中存储任何类型的值,所以我这样做。

$x=[System.Collections.ArrayList]::new()
$x.Count
$x.GetType()

$x.Add([System.Collections.ArrayList]::new()) > $null
$x.Count
$x[0].Count
$x[0].GetType()

$x[0].Add("first element") > $null
$x.Count
$x[0].Count
$x[0][0]