动态删除数组中的项目

时间:2012-10-19 12:17:04

标签: powershell powershell-v2.0

我有大量的XML节点,有时多达40万个项目。我使用where-object来选择基于Type属性的项目。我的问题是,走过这些项目需要相当长的时间,如果我可以删除刚刚从数组中选择的项目会更容易,因此下一个对象的数组会更小。这就是我正在做的事情:

$subset = $items | Where-Object {$_.Type -eq "2"}
'prosess ItemType 2'

$subset = $items | Where-Object {$_.Type -eq "4"}
'prosess ItemType 4'

$subset = $items | Where-Object {$_.Type -eq "8"}
'prosess ItemType 8'

问题是每次我必须再次迭代$items,而不是迭代之前where-object

剩余的内容

where-object是单个线程操作并且只在一个核心上执行

也没有用

我在考虑的是这样的,但我不确定它是否会表现得更好:

$subset = $items | Where-Object {$_.Type -eq "2"}
$items = $items | Where-Object {$_.Type -ne "2"}
'prosess ItemType 2'

$subset = $items | Where-Object {$_.Type -eq "4"}
$items = $items | Where-Object {$_.Type -ne "4"}
'prosess ItemType 4'

$subset = $items | Where-Object {$_.Type -eq "8"}
'prosess ItemType 8'

1 个答案:

答案 0 :(得分:2)

您是否尝试过Select-Xml cmdlet或XmlDocument.SelectNodes方法?通过其本机方法(使用XPath)查询XML的速度应该比Where-Object快得多。