Как удалить дубликаты из массива PowerShell?
$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
Как удалить дубликаты из массива PowerShell?
$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
Ответы:
Используйте Select-Object
(чей псевдоним select
) с -Unique
переключателем; например:
$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
$a = $a | select -Unique
-u
. select -u
Я бы использовал это в командной строке, но при написании кода предлагается использовать полную формулировку PS:Select-Object -Unique
Другой вариант - использовать Sort-Object
(псевдоним sort
, но только в Windows) с -Unique
переключателем, который сочетает сортировку с удалением дубликатов:
$a | sort -unique
Если вы хотите полностью доказать свою бомбу, я бы посоветовал вот что:
@('Apples', 'Apples ', 'APPLES', 'Banana') |
Sort-Object -Property @{Expression={$_.Trim()}} -Unique
Вывод:
Apples
Banana
Это использует Property
параметр для первых Trim()
строк, поэтому лишние пробелы удаляются, а затем выбираются только -Unique
значения.
Больше информации на Sort-Object
:
Get-Help Sort-Object -ShowWindow
Get-Unique
не сработало из-за пробелов
$a | sort -unique
Это работает с нечувствительностью к регистру, поэтому удаляются повторяющиеся строки с разными регистрами. Решил мою проблему.
$ServerList = @(
"FS3",
"HQ2",
"hq2"
) | sort -Unique
$ServerList
Вышеуказанные выходы:
FS3
HQ2
Если список отсортирован, вы можете использовать командлет Get-Unique :
$a | Get-Unique
С помощью моего метода вы можете полностью удалить повторяющиеся значения, оставив вам значения из массива, у которого было только количество 1. Было не ясно, действительно ли это то, что OP хотел, однако мне не удалось найти пример этого решения в Интернете, поэтому вот.
$array=@'
Bananna
Apple
Carrot
Pear
Apricot
Pear
Bananna
'@ -split '\r\n'
($array | Group-Object -NoElement | ?{$_.count -eq 1}).Name
Используете ли вы SORT -UNIQUE
, SELECT -UNIQUE
или GET-UNIQUE
от Powershell 2.0 до 5.1, все приведенные примеры находятся на отдельных массивах столбцов. Мне еще предстоит заставить это работать в массивах с несколькими столбцами, чтобы УДАЛИТЬ повторяющиеся строки, чтобы оставить отдельные вхождения строки в указанных столбцах, или разработать альтернативное решение сценария. Вместо этого эти командлеты возвращают только строки в массиве, которые произошли ОДИН РАЗ с единичным вхождением, и сбрасывают все, что имело дубликат. Обычно мне приходится вручную удалять дубликаты из окончательного вывода CSV в Excel, чтобы закончить отчет, но иногда я хотел бы продолжить работу с указанными данными в Powershell после удаления дубликатов.
Get-Unique
(илиgu
), если ваш массив уже отсортирован.