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

[玩转系统] 在 PowerShell 中合并数组 [6 种方法]

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

在 PowerShell 中合并数组 [6 种方法]


[玩转系统] 在 PowerShell 中合并数组 [6 种方法]

使用 + 运算符

使用 + 运算符在 PowerShell 中合并数组。

使用+运算符:

$array1 = @("Welcome", "to", "Java2Blog!")
$array2 = @("Let's", "learn", "together.")
$merged_array = $array1 + $array2
echo $merged_array

输出 :

Welcome
to
Java2Blog!
Let's
learn
together.

我们使用 @() 表示的子表达式运算符创建了两个名为 $array1$array2 的独立数组(您也可以创建数组不使用子表达式运算符)。请注意,两个数组都包含字符串类型值。

接下来,我们使用 + 运算符连接 $array1$array2 并将合并后的数组分配给 $merged_array > 变量,进一步与 echo 命令一起使用以显示在 PowerShell 控制台上。

使用串联运算符 (+) 时数组的顺序更为重要。在上面的示例中,$array1 的元素后面跟着 $array2 元素,因为我们将它们连接为 $array1 + $array2

要首先获得 $array2 的项目,请将两个数组连接为 $array2 + $array1。请参阅以下示例。

使用+运算符:

$array1 = @("Welcome", "to", "Java2Blog!")
$array2 = @("Let's", "learn", "together.")
$merged_array = $array2 + $array1
echo $merged_array

输出 :

Let's
learn
together.
Welcome
to
Java2Blog!

让我们看另一种用例,其中两个数组都应至少有一个重复元素,但合并的数组必须包含唯一值。在这里,我们需要通过区分大小写的检查来删除相同的项目。请参阅下面的示例以获得清晰的理解。

将 Select-Object 与 -Unique 参数结合使用:

$array1 = @("How", "are", "You")
$array2 = @("What", "are", "you", "learning")
$merged_array = $array1 + $array2
$merged_array = $merged_array | Select-Object -Unique
$merged_array

输出 :

How
are
You
What
you
learning

我们再次创建了两个数组,$array1$array2,其中包含字符串元素。我们使用 + 运算符连接它们并将合并的数组存储在 $merged_array 变量中。现在,$merged_array 中有重复的项目("are""you"),我们希望通过区分大小写检查将其删除。

为此,我们将 $merged_array 通过管道传输到 Select-Object cmdlet,该 cmdlet 使用 -Unique 参数选择唯一项目。此参数指定如果输入的子集具有相同的值或属性,则应仅选择子集中的一个成员。

由于此参数区分大小写,因此字符串的字符大小写不同,并且将被视为唯一值;例如,Hihi 是不同的。请记住,-Unique 参数将在应用其他过滤参数(如果您使用它们)后选择项目。并且重复值的第一个实例将包含在结果中;请参阅上面的输出。

如果要合并两个数组并通过不区分大小写的检查从合并后的数组中删除相同的项,该怎么办?对于这个特定的用例,我们将利用带有 -Unique 参数的 Sort-Object cmdlet 的优势,如下所示。

将 Sort-Object 与 -Unique 参数结合使用:

$array1 = @("How", "are", "You")
$array2 = @("What", "are", "you", "learning")
$merged_array = $array1 + $array2
$merged_array = $merged_array | Sort-Object -Unique
$merged_array

输出 :

are
How
learning
What
You

此代码栅栏与上一个代码栅栏类似,但我们使用带有 -Unique 参数的 Sort-Object 来从 $merged_array 中删除重复项:不区分大小写的检查。

Sort-Object cmdlet 用于按降序或升序对对象进行排序;默认情况下,按升序排序;您必须提及-Descending 参数才能按降序排序。

我们使用了 Sort-Object cmdlet 的默认行为,因为两个数组中都有字符串项,因此它们将按字母顺序从 AZ 排序代码>字符。

-Unique 参数指示 Sort-Object cmdlet 删除重复项并返回给定输入 ($merged_array) 的唯一成员。它包括排序输出中重复值的第一个实例。

这里,-Unique参数不区分大小写,这意味着字符大小写不同的字符串将被视为相同;例如,"World""world" 是相同的字符串。

使用 += 运算符

使用 += 运算符在 PowerShell 中合并数组。

使用 += 运算符:

$array1 = @("How", "are", "You")
$array2 = @("What", "are", "you", "learning")
$array1 += $array2
$array1

输出 :

How
are
You
What
are
you
learning

此示例类似于我们使用 + 运算符来连接/合并数组的示例,但这次我们使用了 += 运算符。当我们不想创建新变量来保存合并数组但想要更新当前数组时,首选 += 运算符,因为我们修改了 $array1将 $array2 的元素合并到其中。

同样,指定变量名称的顺序非常重要。例如,$array1 += $array2$array2 += $array1 的输出会有所不同,因此在编写变量名称时要小心。

在这里,我们可以使用带有 -Unique 参数的 Select-ObjectSort-Object cmdlet,通过以下方式从合并数组中删除相同的值:区分大小写和不区分大小写的检查。我们在上一节中已经了解了这些 cmdlet 和参数;你可以参考一下。

将选择对象/排序对象与 -Unique 参数结合使用:

$array1 = @("How", "are", "You")
$array2 = @("What", "are", "you", "learning")
$array1 += $array2

echo "Remove Duplicates by Case-sensitive Check:"
echo $array1 | Select-Object -Unique
echo "`n"

echo "Remove Duplicates by Case-insensitive Check:"
echo $array1 | Sort-Object -Unique

输出 :

Remove Duplicates by Case-sensitive Check:
How
are
You
What
you
learning

Remove Duplicates by Case-insensitive Check:
are
How
learning
What
You

-Unique 参数与 Select-Object cmdlet 一起使用时区分大小写。另一方面,与 Sort-Object cmdlet 一起使用时它不区分大小写。

使用逗号

在 PowerShell 中使用逗号 (,) 合并两个数组。合并后的数组必须是数组的数组。

使用逗号:

$array1 = @(3,8,5)
$array2 = @(9,8,7)
$merged_array = $array1, $array2
echo $merged_array

输出 :

3
8
5
9
8
7

或者,如果您希望合并数组中 $array2 后跟 $array1,请按如下方式合并数组。

使用逗号:

$array1 = @(3,8,5)
$array2 = @(9,8,7)
$merged_array = $array2, $array1
echo $merged_array

输出 :

9
8
7
3
8
5

由于 $merged_array 是数组的数组,因此我们无法使用 Select-ObjectSort-Object 删除相同的元素,因为这两个 cmdlet在单个物体上工作。要使用这些命令,我们需要首先展平数组。如何?我们通过下面的例子来学习一下。

将选择对象/排序对象与 -Unique 参数结合使用:

$array1 = @(3,8,5)
$array2 = @(9,8,7)

$merged_array = $array2, $array1
$flattened_array = $merged_array | ForEach-Object { $_ }

echo "Remove Duplicates:"
echo $flattened_array | Select-Object -Unique
echo "`n"

echo "Remove Duplicates in Sorted Output:"
echo $flattened_array | Sort-Object -Unique

输出 :

Remove Duplicates:
9
8
7
3
5

Remove Duplicates in Sorted Output:
3
5
7
8
9

使用 AddRange() 方法

使用AddRange()方法在PowerShell中合并两个数组,但合并的数组必须是ArrayList。

使用 AddRange() 方法:

$array1 = 4, 5, 3
$array2 = 4, 5, 6

$merged_array = New-Object System.Collections.ArrayList

$merged_array.AddRange($array1)
$merged_array.AddRange($array2)
$merged_array

输出 :

4
5
3
4
5
6

创建两个数组($array1$array2)后,我们使用 New-Object cmdlet 实例化 ArrayList 类并将其引用分配给 $merged_array 变量。

接下来,我们将 AddRange() 方法与 $merged_array 变量链接起来,以将指定集合(在我们的例子中是一个数组)的元素添加到数组列表的末尾。最后,我们在 PowerShell 控制台上打印了 $merged_array

我们还可以使用 Select-Object/Sort-Object cmdlet 和 -Unique 参数(已在第一部分中学习)来消除重复项从合并的数组列表中。

将选择对象/排序对象与 -Unique 参数结合使用:

$array1 = 4, 5, 3
$array2 = 4, 5, 6

$merged_array = New-Object System.Collections.ArrayList
$merged_array.AddRange($array1)
$merged_array.AddRange($array2)

echo "Remove Duplicates:"
echo $merged_array | Select-Object -Unique
echo "`n"

echo "Remove Duplicates in Sorted Output:"
echo $merged_array | Sort-Object -Unique

输出 :

Remove Duplicates:
4
5
3
6

Remove Duplicates in Sorted Output:
3
4
5
6

到目前为止,我们已经通过各种方法来合并两个数组,其中第二个数组的元素位于第一个数组的元素之后。如果我们要通过逐个获取每个数组中的项目来合并两个数组怎么办?如何才能实现呢?让我们在下一节中看到它。

使用 for 循环

要通过在 PowerShell 中逐一获取每个数组中的元素来合并两个数组:

  • 创建两个包含字符串值的数组。
  • 创建一个空数组来保存合并的内容。
  • 使用 Max() 方法从第一步创建的两个数组中获取最大大小并将其分配给变量。
  • 使用 for 循环遍历第一步中创建的数组。
  • 在每次迭代中:

    • 获取当前元素并将其附加到第二步中创建的数组中。
  • 使用 echo 打印合并的数组。
  • 使用 for 循环:

    $firstNames = @("Mehvish", "Maryam", "Christopher")
    $lastNames = @("Ashiq", "Mukhtar", "Daniel")
    $merged_array = @()
    
    $MaxArraySize = [Math]::Max($firstNames.Length, $lastNames.Length)
    
    for ($i = 0; $i -lt $MaxArraySize; $i++){ 
        $merged_array+=$firstNames[$i]
        $merged_array+=$lastNames[$i]
    }
    
    echo $merged_array

    输出 :

    Mehvish
    Ashiq
    Maryam
    Mukhtar
    Christopher
    Daniel

    在上面的示例中,我们创建了三个数组。第一个数组 ($firstNames) 包含名字,第二个数组 ($lastNames) 包含姓氏,而第三个数组 ($merged_array) 为空。我们使用 @() 运算符来创建所有这些数组;您也可以不使用此运算符来创建。

    接下来,我们使用 Max() 函数从给定长度的 $firstNames$lastNames 数组中获取最大值。请注意,我们使用每个数组的 Length 属性获取了它们的长度。

    我们将 Max() 函数返回的最大值存储在 $MaxArraySize 变量中,我们在 for 循环中进一步使用该变量来在 $firstNames$lastNames 数组上迭代 $MaxArraySize 次。

    我们在每次迭代中检索当前元素,并使用 += 运算符将其附加到 $merged_array 中。最后,我们使用echo命令在控制台上打印$merged_array

    我们可以修改上面的代码,让获取到的元素彼此相邻,并带有 header;请参阅以下代码围栏。

    使用 for 循环:

    $firstNames = @("Mehvish", "Maryam", "Christopher")
    $lastNames = @("Ashiq", "Mukhtar", "Daniel")
    $merged_array = @()
    
    $MaxArraySize = [Math]::Max($firstNames.Length, $lastNames.Length)
    
    $merged_array = for ($i = 0; $i -lt $MaxArraySize; $i++){ 
        Write-Verbose "$($firstNames[$i]),$($lastNames[$i])"
        [PSCustomObject]@{
            FirstNames = $firstNames[$i]
            LastNames = $lastNames[$i]
        }
    }
    echo $merged_array

    输出 :

    FirstNames  LastNames
    ----------  ---------
    Mehvish     Ashiq
    Maryam      Mukhtar
    Christopher Daniel

    上面的代码与上一个类似,有一些修改。在这里,在 for 循环内,我们使用 Write-Verbose cmdlet 写入一条详细消息,表示 $firstNames$lastNames 数组。

    我们使用 [PSCustomObject]@{} 表示法创建一个具有两个属性的对象:FirstNamesLastNames,它们被设置为 $firstNames 的当前值code> 和 $lastNames 数组。然后,对每次迭代中创建的对象进行管道化,将所有对象收集到 $merged_array 变量中。

    一旦 for 循环完成,$merged_array 将有一个对象数组,其中每个对象将包含来自 $firstNames 的一对相应项目和 $lastNames 数组。最后,我们使用 echo 命令在 PowerShell 控制台上显示 $merged_array

    到目前为止,我们已经合并了简单的数组,但是如何合并自定义对象数组呢?

    合并自定义对象数组

    要在 PowerShell 中合并两个自定义对象数组:

    • 创建两个数组,每个数组都有自定义对象,而自定义对象有两个属性。
    • 使用 + 运算符合并第一步中创建的两个数组,并将合并后的数组存储在变量中。
    • 使用echo命令显示合并后的数组。

    合并自定义对象数组:

    $array1 = @([PSCustomObject]@{
                FirstName = "John"
                LastName = "Christopher"
              },
              [PSCustomObject]@{
                FirstName = "Priya"
                LastName = "Mehta"
                })
    
    $array2 = @([PSCustomObject]@{
                FirstName = "Saira"
                LastName = "Daniel"
              },
              [PSCustomObject]@{
                FirstName = "Shruti"
                LastName = "Mehta"
              })
    
    $merged_array = $array1 + $array2
    echo $merged_array

    输出 :

    FirstName LastName
    --------- --------
    John      Christopher
    Priya     Mehta
    Saira     Daniel
    Shruti    Mehta

    此示例与我们在本文中学习的第一个代码片段类似,但数组创建有所不同。在这里,我们创建了两个数组($array1$array2);每个数组都包含我们使用 [PSCustomObject]@{} 表示法创建的自定义对象。每个自定义对象都有两个属性,分别称为“FirstName”和“LastName”。

    然后,我们使用 + 运算符合并两个数组并将其存储在 $merged_array 中,并进一步与 echo 一起使用以显示在安慰。请注意,您可以使用此代码片段并使用我们在本文中学到的不同方法来合并 $array1$array2

    要获取唯一值,请使用带有 -Unique 参数的 Select-ObjectSort-Object cmdlet。

    将选择对象/排序对象与 -Unique 参数结合使用:

    $array1 = @([PSCustomObject]@{
                FirstName = "John"
                LastName = "Christopher"
              },
              [PSCustomObject]@{
                FirstName = "Priya"
                LastName = "mehta"
                })
    
    $array2 = @([PSCustomObject]@{
                FirstName = "Saira"
                LastName = "Daniel"
              },
              [PSCustomObject]@{
                FirstName = "Shruti"
                LastName = "Mehta"
              })
    
    $merged_array = $array1 + $array2
    
    echo "Remove Duplicates by Case-sensitive Check:"
    echo $merged_array | Select-Object -Unique -Property LastName
    echo "`n"
    
    echo "Remove Duplicates by Case-insensitive Check:"
    echo $merged_array | Sort-Object -Unique -Property LastName

    输出 :

    Remove Duplicates by Case-sensitive Check:
    
    LastName
    --------
    Christopher
    mehta
    Daniel
    Mehta
    
    Remove Duplicates by Case-insensitive Check:
    Christopher
    Daniel
    Mehta

    在第一部分中,我们已经学习了 Select-ObjectSort-Object cmdlet 和 -Unique 参数。

    这就是 PowerShell 中合并数组的全部内容。

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

    取消回复欢迎 发表评论:

    关灯