如何从 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,以及利用 Hashtables
,您可以将自己的方法调整以满足特定需求,无论您需要区分大小写还是不区分大小写地删除重复项。