如何使用 PowerShell 对数组值进行排序

  1. 使用 Sort-Object Cmdlet 在 PowerShell 中排序数组值
  2. 使用 [Array]::Sort() 方法在 PowerShell 中排序数组值
  3. 结论
如何使用 PowerShell 对数组值进行排序

对数组进行排序是 PowerShell 脚本中的一项常见且必要的任务,可实现高效的数据组织和操作。无论是处理数字、字符串还是自定义对象数组,PowerShell 都提供了多种排序工具。

在这篇全面的文章中,我们将探讨不同的方法和技巧来排序数组值,以满足各种场景和偏好。

使用 Sort-Object Cmdlet 在 PowerShell 中排序数组值

Sort-Object cmdlet 提供了一种方便且多功能的方法,可以根据各种标准以升序或降序排列数组值。它不限于数组,也可以用于任何对象集合。

在排序数组时,数组中的每个元素都被视为一个对象,并相应应用 Sort-Object cmdlet。

Sort-Object cmdlet 的基本语法如下:

<array> | Sort-Object [-Property <property>] [-Descending] [-Culture <culture>] [-Unique]

其中:

  • <array>:表示要排序的数组。
  • -Property:指定应根据哪些属性进行排序。如果未提供,PowerShell 将使用第一个输入对象的默认排序属性。
  • -Descending:以降序排列对象。如果未使用此参数,则按升序进行排序。
  • -Culture:指定用于排序的文化。这是可选的,默认为当前文化。
  • -Unique:确保排序后的列表包含唯一项。

让我们通过实际示例来了解如何使用 Sort-Object cmdlet 对数组值进行排序。

示例 1:按升序排序

$numbers = 4, 2, 7, 1, 5
$sortedNumbers = $numbers | Sort-Object
$sortedNumbers

在这里,我们有一个存储在变量 $numbers 中的数字数组。通过将该数组传递给 Sort-Object,我们可以按升序对数字进行排序。

排序后的数组存储在 $sortedNumbers 中。

输出:

1
2
4
5
7

示例 2:按降序排序

$cities = "New York", "London", "Paris", "Tokyo", "Sydney"
$sortedCitiesDescending = $cities | Sort-Object -Descending
$sortedCitiesDescending

在这个示例中,数组 $cities 包含城市名称。我们使用 -Descending 参数以降序对它们进行排序,结果保存在 $sortedCitiesDescending 中。

输出:

Tokyo
Sydney
Paris
New York
London

示例 3:根据属性排序对象

$people = @( [PSCustomObject]@{ Name = "Alice"; Age = 25 },
    [PSCustomObject]@{ Name = "Bob"; Age = 30 },
    [PSCustomObject]@{ Name = "Charlie"; Age = 22 } )
$sortedPeople = $people | Sort-Object Age
$sortedPeople

在这个示例中,我们有一个自定义对象数组,表示具有 NameAge 属性的人。我们使用 Sort-Object-Property 参数根据 Age 属性对数组进行排序。

输出:

Name    Age
----    ---
Charlie  22
Alice    25
Bob      30

这些示例展示了 Sort-Object cmdlet 在 PowerShell 中对数组值进行排序的灵活性和强大功能。无论您是处理简单数组还是复杂对象数组,Sort-Object 都提供了一种简单有效的解决方案。

使用 [Array]::Sort() 方法在 PowerShell 中排序数组值

虽然 Sort-Object cmdlet 是排序数组的强大工具,但 PowerShell 还提供了 [Array]::Sort() 方法,这个方法是 .NET[Array] 类的成员。这个方法专门用于排序数组。它直接修改原始数组中元素的顺序,是一种就地排序算法。

使用 [Array]::Sort() 方法的语法如下:

[Array]::Sort(<array>)
  • <array>:表示要排序的数组。

让我们来看一些示例,了解如何利用 [Array]::Sort() 方法对数组值进行排序。

示例 1:按升序排序

要使用 [Array]::Sort() 方法按升序排序数组,我们可以调用该方法并将数组作为参数传递:

$numbers = 4, 2, 7, 1, 5
[Array]::Sort($numbers)
$numbers

在这个示例中,数组 $numbers 包含数字值。我们直接使用 [Array]::Sort() 方法按升序排序该数组。排序是在原地进行的,这意味着原始数组被修改。

输出:

1
2
4
5
7

示例 2:按升序排序字符串

$fruits = "Apple", "Orange", "Banana", "Grapes"
[Array]::Sort($fruits)
$fruits

在这里,数组 $fruits 包含表示水果的字符串值。应用 [Array]::Sort() 方法按字母顺序升序排序数组。原始数组在原地被修改。

输出:

Apple
Banana
Grapes
Orange

示例 3:按降序排序

$ages = 35, 22, 28, 40, 30
[Array]::Sort($ages)
$ages = $ages -join ", "
$ages

在这个示例中,数组 $ages 由数字值组成。我们应用 [Array]::Sort() 以升序排序该数组,然后使用 -join 将排序后的值连接成一个字符串,以提高可读性。

输出:

22, 28, 30, 35, 40

[Array]::Sort() 方法是一种方便的就地排序数组的方式。在您希望直接修改原始数组的情况下特别有用。

然而,需要注意的是,这种方法不适合排序复杂对象或自定义类型的数组,在这种情况下,使用 Sort-Object 会更合适。

结论

在本文中,我们揭示了两种基本方法:灵活的 Sort-Object cmdlet 和直接的 [Array]::Sort() 方法。每种方法都提供了其独特的优势,满足 PowerShell 脚本中不同的场景和偏好。

在处理自定义对象数组或多样数据类型时,Sort-Object cmdlet 突出其灵活的语法及根据属性排序对象的能力。它与管道的无缝集成使其成为数组操作的强大工具,提供升序和降序的排序功能。

另一方面,[Array]::Sort() 方法在简单性和效率上表现优异,直接在原地修改原始数组。它非常适合那些优先考虑修改现有数组而不创建附加变量的场景。

然而,必须认识到它主要适用于排序简单的基本数据类型数组。

最终,您选择 Sort-Object cmdlet 还是 [Array]::Sort() 方法,取决于您的 PowerShell 脚本的具体需求。

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