如何在Powershell中填充未知长度的数组?

时间:2012-10-12 14:06:56

标签: powershell

如何在Powershell中使用动态长度数组(ArrayLists / Lists)?我基本上想要一个2D数组,其中最外层索引的长度是未知的。

我尝试使用$array = @()初始化数组,但在解决此问题时会使索引超出范围异常。然后我尝试使用+ =操作数,正如我在一篇文章中读到的那样,但这会导致字符串连接而不是元素添加。

示例:

$array = @()
$array += @("Elem1x", "Elem1y")
$array += @("Elem2x", "Elem2y")
Echo $array[0][0]

输出:“E”而不是“Elem1x”;

2 个答案:

答案 0 :(得分:10)

尝试这种方式:

$array = @()
$array += ,@("Elem1x", "Elem1y")
$array += ,@("Elem2x", "Elem2y")
$array[0][0]

答案 1 :(得分:10)

Christian的回答是PowerShell方法,适用于大多数情况(中​​小型阵列)。如果您的阵列很大,那么出于性能原因,您可能需要考虑使用ArrayList。也就是说,每次将+=与数组一起使用时,PowerShell必须创建一个新数组并将旧内容复制到新数组中,并将新数组分配给变量。那是因为.NET数组是固定大小的。以下是使用ArrayList执行此操作的方法:

$list = new-object system.collections.arraylist
$list.Add(("Elem1x", "Elem1y", "Elem1z")) > $null
$list.Add(("Elem2x", "Elem2y")) > $null
$list[0][0]

BTW运算符+=的作用取决于运算符左侧对象的类型。如果它是一个字符串,那么你得到字符串连接。如果对象是数组,则右侧将附加到数组(通过创建新数组/副本)。

相关问题