Come posso rimuovere i duplicati da un array di PowerShell?
$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
Come posso rimuovere i duplicati da un array di PowerShell?
$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
Risposte:
Usa Select-Object
(il cui alias è select
) con l' -Unique
opzione; per esempio:
$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
$a = $a | select -Unique
-u
. select -u
Lo userei su una riga di comando, ma scritto in un codice, si consiglia di utilizzare la dicitura PS completa:Select-Object -Unique
Un'altra opzione è usare Sort-Object
(il cui alias è sort
, ma solo su Windows) con lo -Unique
switch, che combina l'ordinamento con la rimozione dei duplicati:
$a | sort -unique
Nel caso in cui tu voglia essere completamente bomba, questo è ciò che consiglierei:
@('Apples', 'Apples ', 'APPLES', 'Banana') |
Sort-Object -Property @{Expression={$_.Trim()}} -Unique
Produzione:
Apples
Banana
Questo utilizza il Property
parametro per prima cosa Trim()
le stringhe, quindi gli spazi extra vengono rimossi e quindi seleziona solo i -Unique
valori.
Maggiori info su Sort-Object
:
Get-Help Sort-Object -ShowWindow
Get-Unique
non ha funzionato perché gli spazi
$a | sort -unique
Funziona con case-insensitive, quindi rimuove le stringhe duplicate con casi diversi. Ho risolto il mio problema.
$ServerList = @(
"FS3",
"HQ2",
"hq2"
) | sort -Unique
$ServerList
Le uscite di cui sopra:
FS3
HQ2
Se l'elenco è ordinato, è possibile utilizzare il cmdlet Get-Unique :
$a | Get-Unique
Con il mio metodo puoi rimuovere completamente i valori duplicati, lasciandoti con valori dall'array che avevano solo un conteggio di 1. Non era chiaro se questo fosse ciò che l'OP voleva effettivamente, tuttavia non sono riuscito a trovare un esempio di questa soluzione online quindi Ecco qui.
$array=@'
Bananna
Apple
Carrot
Pear
Apricot
Pear
Bananna
'@ -split '\r\n'
($array | Group-Object -NoElement | ?{$_.count -eq 1}).Name
Sia che si sta utilizzando SORT -UNIQUE
, SELECT -UNIQUE
o GET-UNIQUE
da PowerShell 2,0-5,1, tutti gli esempi forniti sono array singola colonna. Devo ancora farlo funzionare su array con più colonne per RIMUOVERE righe duplicate per lasciare singole occorrenze di una riga su dette colonne o sviluppare una soluzione di script alternativa. Invece, questi cmdlet hanno restituito solo righe in un array che si sono verificate UNA VOLTA con un'occorrenza singolare e hanno scaricato tutto ciò che aveva un duplicato. In genere devo rimuovere manualmente i duplicati dall'output CSV finale in Excel per completare il rapporto, ma a volte vorrei continuare a lavorare con tali dati all'interno di Powershell dopo aver rimosso i duplicati.
Get-Unique
(ogu
) se il tuo array è già ordinato.