当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] PowerShell 中的数组比较

作者:精品下载站 日期:2024-12-14 05:04:28 浏览:14 分类:玩电脑

PowerShell 中的数组比较


您需要在 PowerShell 中比较两个数组吗?在本 PowerShell 教程中,我将使用各种方法和示例解释有关 PowerShell 中数组比较的所有内容。我们将探讨如何在 PowerShell 中比较数组。

要在 PowerShell 中比较数组,通常使用 Compare-Object cmdlet,它通过将一组对象作为参考集,另一组作为差异集来比较两组对象,以识别每个数组都相同或唯一。对于更手动的方法,可以使用-contains运算符通过迭代每个项目来检查数组是否包含特定元素。

在 PowerShell 中比较数组

数组是一种保存项目集合的数据结构,这些项目可以是任何数据类型。您可以通过向变量分配多个值(以逗号分隔)来在 PowerShell 中创建数组:

$array1 = 1, 2, 3, 4, 5
$array2 = 3, 4, 5, 6, 7

现在,让我们看看在 PowerShell 中比较这些数组的不同方法。

方法 1:比较对象 Cmdlet

在 PowerShell 中比较数组的最直接方法是使用 Compare-Object cmdlet。此 cmdlet 将两个数组作为输入并返回它们之间的差异。

Compare-Object -ReferenceObject $array1 -DifferenceObject $array2

运行此命令时,PowerShell 将显示每个阵列特有的项目。默认情况下,输出将包含两个符号:

  • 表示该项目对于差异对象是唯一的(在本例中为 $array2)。

例子 :

$array1 = 1, 2, 3, 4, 5
$array2 = 3, 4, 5, 6, 7

Compare-Object -ReferenceObject $array1 -DifferenceObject $array2

您可以看到,在我使用 VS code 执行 PowerShell 脚本后,这将输出。检查下面的屏幕截图:

[玩转系统] PowerShell 中的数组比较

InputObject SideIndicator
----------- -------------
          6 =>
          7 =>
          1 <=
          2 <=

方法2:使用循环进行比较

在 PowerShell 中比较数组的另一种方法是使用循环。您可以迭代一个数组中的每一项,并检查它是否存在于另一个数组中。

例子 :

$array1 = 1, 2, 3, 4, 5
$array2 = 3, 4, 5, 6, 7

foreach ($item in $array1) {
    if ($array2 -notcontains $item) {
        Write-Host "$item is not in array2"
    }
}

foreach ($item in $array2) {
    if ($array1 -notcontains $item) {
        Write-Host "$item is not in array1"
    }
}

该脚本将输出:

1 is not in array2
2 is not in array2
6 is not in array1
7 is not in array1

请查看下面的屏幕截图供您参考,我期望使用 VS code 的完整脚本。

[玩转系统] PowerShell 中的数组比较

方法三:使用自定义函数

您可能想要创建自定义函数来进行更复杂的比较或重复任务。该函数可以封装数组比较所需的逻辑,并且可以在整个脚本中重复使用。以下是如何在 PowerShell 中创建用于数组比较的自定义函数。

例子 :

function Compare-Array {
    param(
        [array]$array1,
        [array]$array2
    )

    $result = @()

    foreach ($item in $array1) {
        if ($array2 -notcontains $item) {
            $result += "$item is unique to array1"
        }
    }

    foreach ($item in $array2) {
        if ($array1 -notcontains $item) {
            $result += "$item is unique to array2"
        }
    }

    return $result
}

$array1 = 1, 2, 3, 4, 5
$array2 = 3, 4, 5, 6, 7

Compare-Array -array1 $array1 -array2 $array2

运行此函数将为您提供与循环示例类似的输出,但格式更清晰、更可重用。

方法 4:在 PowerShell 中使用 LINQ

对于高级用户,PowerShell 可以访问 .NET 的语言集成查询 (LINQ) 功能来执行复杂的数组比较。

例子 :

$array1 = 1, 2, 3, 4, 5
$array2 = 3, 4, 5, 6, 7

$onlyInArray1 = [System.Linq.Enumerable]::Except([int[]]$array1, [int[]]$array2)
$onlyInArray2 = [System.Linq.Enumerable]::Except([int[]]$array2, [int[]]$array1)

$onlyInArray1
$onlyInArray2

这将使用 LINQ 的 Except 方法输出每个数组唯一的项目。

结论

在 PowerShell 中比较数组可以使用各种方法来完成,从简单的 Compare-Object cmdlet 到更复杂的自定义函数(如循环甚至 LINQ)。

在本 PowerShell 教程中,我解释了如何使用不同的方法和示例在 PowerShell 中比较数组

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯