根据 属性 的值获取 Generic/List 中对象的索引
Get index of object in Generic/List based on value of a property
我可以用我的 class 实例填充 Generic.List
,每个实例在 ID 属性 中都有一个唯一值,就像这样。
$packages = [System.Collections.Generic.List[object]]::New()
class Package {
# Properties
[String]$ID
# Constructor
Package ([String]$id) {
$this.ID = $id
}
}
foreach ($i in 65..90) {
$packages.Add([Package]::New("$([char]$i)"))
}
现在我想获取特定项目的索引,按照 $packages.IndexOf('C')
的行。但是在 C# 中执行此操作似乎需要使用 lambda,而 PowerShell 似乎不支持它。我宁愿不必初始化我自己的索引变量并遍历列表中的所有项目,检查它们的 ID 并沿途递增索引。但是,也许这就是仅使用本机 PS cmdlet 的 PowerShell 与仅使用 C# 之间的灰色地带,在这两个极端中您都错过了糖分,必须自己制作?
您可以使用 [scriptblock]
作为谓词:
$packages.FindIndex({$args[0].ID -eq 'C'})
# or
$packages.FindIndex({param($item) $item.ID -eq 'C'})
假设您的包 ID 是唯一的,请考虑使用字典而不是列表:
$packages = [System.Collections.Generic.Dictionary[string,Package]]::new([StringComparer]::InvariantCultureIgnoreCase)
class Package {
# Properties
[String]$ID
# Constructor
Package ([String]$id) {
$this.ID = $id
}
}
foreach ($i in 65..90) {
$ID = "$([char]$i)"
$packages.Add($ID, [Package]::new($ID))
}
现在您不再需要担心项目的位置,现在您可以简单地通过 ID 删除一个项目:
$wasRemoved = $packages.Remove("C")
Remove()
returns $true
成功删除条目时,$false
找不到密钥时
我可以用我的 class 实例填充 Generic.List
,每个实例在 ID 属性 中都有一个唯一值,就像这样。
$packages = [System.Collections.Generic.List[object]]::New()
class Package {
# Properties
[String]$ID
# Constructor
Package ([String]$id) {
$this.ID = $id
}
}
foreach ($i in 65..90) {
$packages.Add([Package]::New("$([char]$i)"))
}
现在我想获取特定项目的索引,按照 $packages.IndexOf('C')
的行。但是在 C# 中执行此操作似乎需要使用 lambda,而 PowerShell 似乎不支持它。我宁愿不必初始化我自己的索引变量并遍历列表中的所有项目,检查它们的 ID 并沿途递增索引。但是,也许这就是仅使用本机 PS cmdlet 的 PowerShell 与仅使用 C# 之间的灰色地带,在这两个极端中您都错过了糖分,必须自己制作?
您可以使用 [scriptblock]
作为谓词:
$packages.FindIndex({$args[0].ID -eq 'C'})
# or
$packages.FindIndex({param($item) $item.ID -eq 'C'})
假设您的包 ID 是唯一的,请考虑使用字典而不是列表:
$packages = [System.Collections.Generic.Dictionary[string,Package]]::new([StringComparer]::InvariantCultureIgnoreCase)
class Package {
# Properties
[String]$ID
# Constructor
Package ([String]$id) {
$this.ID = $id
}
}
foreach ($i in 65..90) {
$ID = "$([char]$i)"
$packages.Add($ID, [Package]::new($ID))
}
现在您不再需要担心项目的位置,现在您可以简单地通过 ID 删除一个项目:
$wasRemoved = $packages.Remove("C")
Remove()
returns $true
成功删除条目时,$false
找不到密钥时