如何在Powershell中使用动态长度数组(ArrayLists / Lists)?我基本上想要一个2D数组,其中最外层索引的长度是未知的。
我尝试使用$array = @()
初始化数组,但在解决此问题时会使索引超出范围异常。然后我尝试使用+ =操作数,正如我在一篇文章中读到的那样,但这会导致字符串连接而不是元素添加。
示例:
$array = @()
$array += @("Elem1x", "Elem1y")
$array += @("Elem2x", "Elem2y")
Echo $array[0][0]
输出:“E”而不是“Elem1x”;
答案 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运算符+=
的作用取决于运算符左侧对象的类型。如果它是一个字符串,那么你得到字符串连接。如果对象是数组,则右侧将附加到数组(通过创建新数组/副本)。