如何從 PowerShell 陣列中刪除重複值
-
使用
Select-Object
從 PowerShell 陣列中刪除重複值 -
使用
Sort-Object
從 PowerShell 陣列中刪除重複值 -
使用
Get-Unique
從 PowerShell 陣列中刪除重複項目 -
使用
Hashtable
從 PowerShell 陣列中刪除重複項目 - 結論

陣列是 PowerShell 中的基本資料結構,允許您存儲項目的集合,無論這些項目是相同類型還是不同類型。在各種腳本場景中,您可能會遇到需要從陣列中消除重複項目的情況。
本教程將介紹從 PowerShell 陣列中刪除重複項目的不同方法。
使用 Select-Object
從 PowerShell 陣列中刪除重複值
Select-Object
cmdlet 用於選擇物件或物件集合的指定屬性。您還可以在陣列的指定位置選擇唯一物件。
-Unique
參數指定如果物件中存在相同的屬性和值,則僅選擇一個成員。它是區分大小寫的,因此僅在字母大小寫上有所不同的字串也被視為唯一值。
我們創建了一個包含不同大小寫的重複項目的陣列 $data
。
$data = @("powershell", "arrays", "powershell", "Arrays", "PowerShell")
以下示例從陣列中選擇唯一值並將其保存到 $data
變量中。結果,重複元素將從陣列中刪除。
命令:
$data = $data | Select-Object -Unique
$data
輸出:
powershell
arrays
Arrays
PowerShell
它刪除了重複的字串 "powershell"
,但不會刪除 "PowerShell"
,因為字串中有一個大寫字母。
使用 Sort-Object
從 PowerShell 陣列中刪除重複值
Sort-Object
cmdlet 根據物件的屬性值對物件進行升序或降序排序。使用 Sort-Object
時,您也可以使用 -Unique
參數從物件中刪除重複項目。
但它是不區分大小寫的,因此僅在字母大小寫上有所不同的字串也被視為相同。以下示例從陣列中刪除重複項目並將其保存到變量 $a
中。
命令:
$a = @("powershell", "arrays", "powershell", "Arrays", "PowerShell")
$a = $a | Sort-Object -Unique
$a
輸出:
Arrays
PowerShell
它刪除了 "Arrays"
和 "PowerShell"
,即使它們僅在字母大小寫上不同。如果您想使 Sort-Object
區分大小寫,您可以使用 -CaseSensitive
參數。
命令:
$b = @("powershell", "arrays", "powershell", "Arrays", "PowerShell")
$b = $b | Sort-Object -Unique -CaseSensitive
$b
輸出:
arrays
Arrays
powershell
PowerShell
現在,輸出僅刪除 "powershell"
,因為它是唯一有重複(根據大小寫)的變量。
使用 Get-Unique
從 PowerShell 陣列中刪除重複項目
Get-Unique
cmdlet 從排序過的列表中獲取唯一項目。它將排序列表中的每個項目與下一項目進行比較,刪除重複項目,並僅返回每個項目的一個成員。
此 cmdlet 僅在列表已排序的情況下有效。您可以使用 Sort-Object
cmdlet 根據屬性值對物件進行排序。
以下示例使用 Get-Unique
cmdlet 在使用 Sort-Object
對陣列元素進行排序後,從陣列 $sort
中刪除重複項目。
命令:
$c = @("powershell", "arrays", "powershell", "Arrays", "PowerShell")
$c = $c | Sort-Object | Get-Unique
$c
輸出:
Arrays
arrays
PowerShell
powershell
在此輸出中,"powershell"
被刪除。
Get-Unique
是區分大小寫的,因此僅在字母大小寫上有所不同的字串也被視為唯一值。這樣,您可以輕鬆從 PowerShell 陣列中刪除重複元素。
使用 Hashtable
從 PowerShell 陣列中刪除重複項目
PowerShell 允許您有效地利用 Hashtable
來刪除重複項目。Hashtable
存儲鍵值對,其中鍵是唯一的,通過創建 Hashtable
並將陣列項目用作鍵,您可以自動刪除重複項目。
以下示例初始化一個空的 Hashtable
($uniqueHash
),然後遍歷陣列,將每個項目設置為 Hashtable
中的鍵。由於鍵必須是唯一的,因此重複項目會被自動消除。
結果存儲在 $uniqueArray
變量中。
$array = @("powershell", "arrays", "powershell", "Arrays", "PowerShell")
$uniqueHash = @{}
$array | ForEach-Object { $uniqueHash[$_] = $true }
$uniqueArray = $uniqueHash.Keys
$uniqueArray
輸出:
powershell
arrays
在此輸出中,重複項目使用 Hashtable
刪除並打印剩餘值。請注意,使用 Hashtable
刪除重複項目並不考慮值的大小寫敏感性。
結論
在 PowerShell 中,管理陣列中的重複值是一項常見的任務,本文介紹了幾種實現此目的的方法。通過使用 Select-Object
、Sort-Object
和 Get-Unique
cmdlet,以及利用 Hashtable
,您可以根據您的具體需求量身定制方法,無論您需要區分大小寫還是不區分大小寫的重複值刪除。