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

Nil*_*zor 8 powershell

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

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

例:

$array = @()
$array += @("Elem1x", "Elem1y")
$array += @("Elem2x", "Elem2y")
Echo $array[0][0]
Run Code Online (Sandbox Code Playgroud)

输出:"E"而不是"Elem1x";

CB.*_*CB. 10

试试这种方式:

$array = @()
$array += ,@("Elem1x", "Elem1y")
$array += ,@("Elem2x", "Elem2y")
$array[0][0]
Run Code Online (Sandbox Code Playgroud)


Kei*_*ill 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]
Run Code Online (Sandbox Code Playgroud)

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