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