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