需要在 powershell 的 arraylist 中添加和查找元素索引值?

Need to add and find element index value in arraylist in powershell?

在数组列表中添加字符串元素并找到它的索引值?

[code...]
$eventList = New-Object System.Collections.ArrayList
$eventList.Add("Hello")
$eventList.Add("test")
$eventList.Add("hi")

不工作抛出错误:-

Method invocation failed because [System.String[]] doesn't contain a method named 'Add'.
At C:\Users\Administrator\Desktop\qwedqwe.ps1:9 char:15
+ $eventList.Add <<<< ("Hello")
    + CategoryInfo          : InvalidOperation: (Add:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound

如评论中所述,如果您是在 ISE(或另一个 IDE)中开发的,并且之前已为 $eventList 分配了类型转换,如下所示:

[string[]]$eventList = @()

或类似的,注释掉前面的行对您没有帮助 - 变量已经存在并且将在其剩余生命周期内绑定该类型。

您可以使用 Remove-Variable eventList

删除任何以前的分配

排序后,我们可以继续实际定位索引。如果您对完全匹配的索引感兴趣,请使用 IndexOf():

PS> $eventList.IndexOf('hi')
2

如果这不够灵活,请使用 a generic List<T>,它实现了 FindIndex()

FindIndex() 采用 predicate - 一个函数 returns $true$false 基于输入(项目在列表):

$eventList = New-Object System.Collections.Generic.List[string]
$eventList.Add("Hello")
$eventList.Add("test")
$eventList.Add("hi")
$predicate = {
  param([string]$s) 

  return $s -like 'h*'
}

然后以 $predicate 函数作为唯一参数调用 FindIndex()

PS> $eventList.FindIndex($predicate)
0

(它与索引 0 处的 Hello 匹配,因为它以 h 开头)