8

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

我尝试使用 初始化一个数组$array = @(),但是在处理其中的任何内容时都会出现索引超出范围异常。然后我尝试使用 += 操作数,正如我在一篇文章中所读到的,但这会导致字符串连接而不是元素添加。

例子:

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

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

4

2 回答 2

11

试试这个方法:

$array = @()
$array += ,@("Elem1x", "Elem1y")
$array += ,@("Elem2x", "Elem2y")
$array[0][0]
于 2012-10-12T14:11:21.677 回答
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]

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

于 2012-10-12T15:04:43.380 回答