如何编辑搜索返回的PowerShell数组项?

WD-*_*-40 4 powershell

我试图更改哈希表中特定项的值.我可以通过迭代整个对象,测试特定值的每一个键,然后在满足条件时更改它,如下所示:

for ($i=0; $i -le $haystack.length-1; $i++)
    {
        if ($haystack[$i].name -eq "needle")
            {
            $haystack[$i].currentstatus = "found"
            }
    }
Run Code Online (Sandbox Code Playgroud)

上面的代码可以工作,但似乎必须有一种更有效的方法来完成任务,特别是当大海捞针很大而且只有一根针时.

我试着使用where-object,可以找到我正在寻找的记录:

$haystack | where-object {$_.name -eq "needle"}
Run Code Online (Sandbox Code Playgroud)

这似乎比进行蛮力搜索要好得多,但我现在不知道如何获得该记录.如果我在数组中有索引,那么我可以轻松地使用它来编辑我想要的值,那么有没有办法获得数组索引?这通常是怎么做的?谢谢.

Jas*_*her 6

如果您控制创建$haystack,并且$haystackitem.name始终是唯一的,我建议创建一个以Name作为索引的哈希表.

如果上述任何一种情况都不正确,您可以通过使用foreach ($object in $collection) {}来加快速度.您不需要对象的索引,因为对象将通过引用传递.您将在数组中看到对对象所做的任何更改.

但最好的表现是创建一些托管代码来对数组进行排序并使用有效的搜索算法.但那将是更多的工作.