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名称,我想保留所有这些名称?