如何在 PowerShell 中查找数组中的重复项?
您需要在 PowerShell 中从数组中查找重复元素吗?在本 PowerShell 教程中,我将解释如何使用各种方法和示例在 PowerShell 中查找数组中的重复项。
要在 PowerShell 中查找数组中的重复项,您可以使用 Group-Object cmdlet 并过滤计数大于 1 的组。例如,$duplicates=$array |组对象 |其中对象 { $_.Count -gt 1 } | ForEach-Object { $_.Name } 将从数组 $array 中返回重复值的列表
在 PowerShell 中查找数组中的重复项
在 PowerShell 中,您可以通过将多个值分配给单个变量(以逗号分隔)来创建数组。
$myArray = "apple", "banana", "cherry", "apple", "banana"在上面的示例中,$myArray 是一个包含五个项目的数组,其中包括一些重复项。现在,让我们检查使用不同方法从 PowerShell 数组中查找重复项的各种方法。
方法一:使用组对象
Group-Object cmdlet 是在 PowerShell 中对对象进行分组的一种简单方法。当涉及到数组时,您可以使用它对相似的项目进行分组并对其进行计数。要查找重复项,您可以过滤这些组以查找计数大于 1 的任何组。
这是一个例子:
$myArray = "apple", "banana", "cherry", "apple", "banana"
$duplicates = $myArray | Group-Object | Where-Object { $_.Count -gt 1 }
$duplicates | Foreach-Object { $_.Name }该脚本将输出 apple 和 banana,因为这些是在数组中出现多次的项目。您可以在下面的屏幕截图中看到输出:
方法 2:使用选择对象
另一种方法是将 Select-Object cmdlet 与 -Unique 开关结合使用,该开关可过滤掉重复的条目。如果您想查看 PowerShell 数组的唯一值,此方法非常有用。但是,要查找重复项,您必须将唯一数组与原始数组进行比较。
具体方法如下:
$myArray = "apple", "banana", "cherry", "apple", "banana"
$unique = $myArray | Select-Object -Unique
$duplicates = $myArray | Where-Object { $unique -notcontains $_ }在此脚本中,$unique 将包含所有唯一元素,而 $duplicates 将在与原始数组进行比较后获得重复项。
方法 3:使用自定义比较
您还可以编写自定义脚本来从 PowerShell 数组中查找重复项,您可以编写一个脚本来迭代数组并通过跟踪已经看到的项目来检查重复项。
这是一个用于查找重复项的自定义脚本:
$myArray = "apple", "banana", "cherry", "apple", "banana"
$seen = @{}
$duplicates = @()
foreach ($item in $myArray) {
if ($seen[$item]) {
$duplicates += $item
} else {
$seen[$item] = $true
}
}
$duplicates = $duplicates | Select-Object -Unique
$duplicates此脚本使用哈希表 $seen 来跟踪已迭代的项目。如果某个项目已存在于哈希表中,则会将其添加到 $duplicates 数组中。最后,我们将 $duplicates 过滤为仅唯一值,因为相同的重复项可能会被添加多次。
您可以在下面的屏幕截图中看到输出:
方法 4:在 PowerShell 中使用 LINQ
对于那些更高级并且熟悉 .NET 的人来说,PowerShell 可以利用 LINQ(语言集成查询)来查找重复项。这是一种更复杂的方法,但对于大型数据集来说非常有效。
$myArray = "apple", "banana", "cherry", "apple", "banana"
$duplicates = [System.Linq.Enumerable]::ToLookup([object[]]$myArray, [Func[object, object]]{param($i) $i}) |
Where-Object { $_.Count -gt 1 } |
Foreach-Object { $_.Key }该脚本将数组转换为查找,其中每一项都是一个键,并过滤掉出现多次的键(这表示重复)。
结论
在 PowerShell 中可以通过多种方式轻松查找数组中的重复项;您可以使用Group-Object、Select-Object、自定义比较脚本甚至LINQ。
在这篇文章中,我解释了如何使用各种方法在 PowerShell 中查找数组中的重复项。

