小编Jus*_*ote的帖子

从数组的属性获取唯一索引项的最快方法

制作一个像这样的数组,它代表我正在寻找的内容:

$array = @(1..50000).foreach{[PSCustomObject]@{Index=$PSItem;Property1='Hello!';Property2=(Get-Random)}}
Run Code Online (Sandbox Code Playgroud)

获取索引属性“43122”的项目的最快方法是什么?

我有一些想法,但我觉得必须有一种更快的方法:

管道在哪里

measure-command {$array | where-object index -eq 43122} | % totalmilliseconds
420.3766
Run Code Online (Sandbox Code Playgroud)

哪里的方法

measure-command {$array.where{$_ -eq 43122}} | % totalmilliseconds
155.1342
Run Code Online (Sandbox Code Playgroud)

首先制作一个哈希表并查询“索引”结果。起初很慢,但随后的查找速度会更快。

measure-command {$ht = @{};$array.foreach{$ht[$PSItem.index] = $psitem}} | % totalmilliseconds
124.0821

measure-command {$ht.43122} | % totalmilliseconds
3.4076
Run Code Online (Sandbox Code Playgroud)

有没有比先构建哈希表更快的方法?也许是不同的 .NET 数组类型,例如某种特殊类型的索引列表,我可以最初将其存储在其中,然后运行一个方法来根据唯一属性提取项目?

powershell

6
推荐指数
2
解决办法
2931
查看次数

标签 统计

powershell ×1