Powershell基于一个对象数组创建一个新的对象数组,并删除某些项
我正在尝试根据一些必须遵循的规则创建一个新数组。我相信有一些更简单的方法可以做到这一点,但我不能想出它Powershell基于一个对象数组创建一个新的对象数组,并删除某些项,powershell,Powershell,我正在尝试根据一些必须遵循的规则创建一个新数组。我相信有一些更简单的方法可以做到这一点,但我不能想出它 $files数组包含以下内容: Name Amount ----------- -------------- KL 3 KS 55 KS 54 KS 50 KM
$files
数组包含以下内容:
Name Amount
----------- --------------
KL 3
KS 55
KS 54
KS 50
KM 4
KD 1
KW 4
KD 3
KV 4
KD 4
KL 7
KS 1
我想按与上面相同的顺序创建一个新数组,但删除除最新的KD&KL
name以外的所有数组。这看起来像:
KS 55
KS 54
KS 50
KM 4
KW 4
KV 4
KD 4
KL 7
KS 1
到目前为止,我一直在尝试forloop来计算KD和KL的数量,但我对如何在列表的后面添加这些内容感到困惑。使用有序字典来跟踪最后看到的具有给定名称的对象:
$latest = [ordered]@{}
$files |ForEach-Object {
$latest[$_.Name] = $_
}
$arrayWithOnlyLatest = $latest.Values
$ARRAYWITHONLYLAST
现在只包含最后看到的每个名称的对象我相信有一种更聪明的方法,但不必获取最后的KD/KL,你可以做相反的事情。将阵列反转,只保留第一个KD/KL,然后将阵列反转回来
[array]::Reverse($files)
$kdfound = $klfound = $false
$files = switch -Regex ($files)
{
'KD' {if($kdfound -eq $false){$kdfound = $true; $_}}
'KL' {if($klfound -eq $false){$klfound = $true; $_}}
default {$_}
}
[array]::Reverse($files)
$files
输出
Name,Amount
KS,55
KS,54
KS,50
KM,4
KW,4
KV,4
KD,4
KL,7
KS,1
抱歉,我猜我的示例很差,我只想删除旧的KD和KL名称,所以如果有重复的KS名称,我想保留所有这些名称?