你如何在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操作员的操作+=取决于操作员左侧对象的类型.如果它是一个字符串,那么你得到字符串连接.如果对象是数组,则右侧将附加到数组(通过创建新数组/副本).
| 归档时间: |
|
| 查看次数: |
29643 次 |
| 最近记录: |