Как удалить дублирующиеся элементы в хеш-таблице, которые были добавлены с помощью foreach в сценарии powershell? - PullRequest
0 голосов
/ 07 марта 2019

У меня есть массив, который имеет дублированные элементы.Я хочу использовать словарь для удаления дублированных элементов.Это мой блок кода:

$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.

Ответы [ 2 ]

1 голос
/ 07 марта 2019

Если вы хотите, чтобы идентичные ключи перезаписывали значение, уже имеющееся в словаре (последний элемент «выигрывает»), используйте следующий синтаксис:

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

Если вы хотите пропустить элементы с теми же ключами,используйте это:

foreach ($item In $pkg) {
    if (!($dictionary.Contains($item.Id))) {
        $dictionary.Add($item.Id, $item.Version)
    }
}
0 голосов
/ 07 марта 2019

Если вы не хотите перезаписывать values уже существующего keys, вы можете проверить, существует ли key, прежде чем добавить его в hashtable (снова):

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