【问题标题】:Fastest Filter Peformance for Array of Objects对象数组的最快过滤器性能
【发布时间】:2018-07-25 13:22:21
【问题描述】:

我正在使用 Import-CSV cmdlet 加载包含 6 列的约 180k 项的列表。由于此列表的大小,Where-Object cmdlet 的性能不是很好,因为对它的每次调用都会迭代整个列表。因此,我迫切希望找到另一种方法来更快地进行过滤。我总是只过滤其中一列,然后更新结果过滤列表中的另一列。有什么我忽略的东西可能会有所帮助吗?例如索引搜索列或转换为其他对象?感谢您的想法。

【问题讨论】:

  • 如果您发布您的代码或您尝试执行的条件和转换的一些示例,您将获得更好的答案。

标签: powershell


【解决方案1】:

遍历整个列表一次,然后对当前项目进行每个条件检查和相关替换。

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

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

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

Import-Csv -Path $myCsv | Convert-MyRow

【讨论】:

  • 好主意!谢谢你打破了我的心理障碍!
猜你喜欢
  • 1970-01-01
  • 2015-10-03
  • 1970-01-01
  • 2015-02-20
  • 1970-01-01
  • 2019-05-29
  • 1970-01-01
  • 2014-08-01
  • 1970-01-01
相关资源
最近更新 更多