如何使用PowerShell反转ArrayList

rseugnpd  于 2023-06-23  发布在  Shell
关注(0)|答案(1)|浏览(143)

我正在尝试使用PowerShell反转ArrayList集合。请看示例代码:

[System.Collections.ArrayList]$arr = @()
$arr.Add("Apple") | Out-Null
$arr.Add("Orange") | Out-Null
$arr.Add("Banana") | Out-Null

# Print the first element
$arr[0]

# Reverse the array
[array]::Reverse($arr)

# Print the first element
$arr[0]

输出为AppleApple--我期望输出为AppleBanana
这是怎么了?

7gcisfzg

7gcisfzg1#

您正在使用静态Array.Reverse()方法,该方法可以对数组进行操作,但不能对ArrayList进行操作,因为ArrayList不继承Array。
你可以使用内置在ArrayList中的反向方法:

$arrayList = New-Object -TypeName System.Collections.ArrayList -ArgumentList (,("Alice", "Bob", "Charlie", "Dan"))

Write-Host "Array list forward:"
$arrayList

Write-Host "Array list backward:"
$arrayList.Reverse()
$arrayList

此外,如果列表中的所有对象都是相同的类型,那么最好使用泛型列表而不是ArrayList。这使得列表中的对象类型变得明确,并防止以后需要强制转换任何东西。

$genericList = New-Object -TypeName System.Collections.Generic.List[string]
$genericList.Add("Alice")
$genericList.Add("Bob")
$genericList.Add("Charlie")
$genericList.Add("Dan")

Write-Host "Generic list forward"
$genericList

Write-Host "Generic list backward"
$genericList.Reverse()
$genericList

也可以选择使用标准数组。如果您不打算在它上面进行插入或删除操作,那么最好使用。如果您确实计划执行这些操作,那么通用列表在性能和内存使用方面要上级得多。

相关问题