如何从 PowerShell 数组中删除重复值

  1. 使用 Select-Object 从 PowerShell 数组中删除重复值
  2. 使用 Sort-Object 从 PowerShell 数组中删除重复值
  3. 使用 Get-Unique 从 PowerShell 数组中删除重复项
  4. 使用 Hashtable 从 PowerShell 数组中删除重复项
  5. 结论
如何从 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-ObjectSort-ObjectGet-Unique cmdlet,以及利用 Hashtables,您可以将自己的方法调整以满足特定需求,无论您需要区分大小写还是不区分大小写地删除重复项。

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
作者: Rohan Timalsina
Rohan Timalsina avatar Rohan Timalsina avatar

Rohan is a learner, problem solver, and web developer. He loves to write and share his understanding.

LinkedIn Website

相关文章 - PowerShell Array