对象数组的最快过滤器性能

时间:2018-02-14 21:04:16

标签: powershell

我使用Import-CSV cmdlet加载包含6列的~180k项目列表。由于此列表的大小,Where-Object cmdlet的性能不是很高,因为每次调用它都将遍历整个列表。因此,我迫切希望找到另一种方法来更快地进行过滤。我总是只过滤其中一列,然后更新生成的过滤列表中的另一列。我有什么东西可以帮助你吗?如索引搜索列或转换为其他对象?谢谢你的想法。

1 个答案:

答案 0 :(得分:0)

迭代整个列表一次,并对当前项目进行每次条件检查和相关替换。

$myRows | ForEach-Object -Process {
    if ($_.prop1 -eq $condition1) {
        $_.prop4 = $newValue
    }

    if ($_.prop2 -eq $condition2) {
        $_.prop6  -eq $someOtherValue
    }
}

更好的方法可能是编写自己的函数来封装转换逻辑并支持管道。如果您的列始终应该是相同的,您甚至可以通过属性值绑定它们。那么你基本上只做:

Import-Csv -Path $myCsv | Convert-MyRow