如何删除在 powershell 脚本中使用 foreach 添加的哈希表中的重复元素?

How to remove duplicated elements on hashtable that were added with foreach in powershell script?

我有一个包含重复元素的数组。我希望使用字典来删除重复的元素。这是我的代码块:

$dictionary = [ordered]@{}
ForEach ($item In $pkg){
    $dictionary.Add($item.Id, $item.Version)
}

字典仍然有重复的元素,但是像这样添加时:

$dictionary.Add("NHibernate", "4.0.4.4000")

$dictionary.Add("NHibernate", "4.0.4.4000")

这是不允许的。我究竟做错了什么?

数组是这样做的结果

@( Get-Project -All | ? { $_.ProjectName } | % { Get-Package -ProjectName $_.ProjectName } ) | ? { $_.LicenseUrl } | ...

在 Visual Studio 中的包管理器控制台中。

如果您不想覆盖已经存在的 keysvalues,您可以在将 key 添加到 hashtable 之前检查它是否已经存在(再次):

ForEach ($item In $pkg){
    if( -not $dictionary.Item($item.Id)){
        $dictionary.Add($item.Id, $item.Version)
    }
}

如果要允许相同的键覆盖字典中已有的值(最后一项 'wins'),请使用以下语法:

foreach ($item In $pkg){
    $dictionary[$item.Id] = $item.Version
}

如果您想跳过具有相同键的项目,请使用:

foreach ($item In $pkg) {
    if (!($dictionary.Contains($item.Id))) {
        $dictionary.Add($item.Id, $item.Version)
    }
}