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

[玩转系统] 对对象进行排序

作者:精品下载站 日期:2024-12-14 03:03:21 浏览:13 分类:玩电脑

对对象进行排序


我们可以使用 Sort-Object cmdlet 组织显示的数据,以便更轻松地进行扫描。 Sort-Object 采用一个或多个属性的名称进行排序,并返回按这些属性的值排序的数据。

基本排序

考虑列出当前目录中的子目录和文件的问题。如果我们想按 LastWriteTime 排序,然后按 Name 排序,我们可以通过输入以下内容来完成:

Get-ChildItem |
    Sort-Object -Property LastWriteTime, Name |
    Format-Table -Property LastWriteTime, Name
LastWriteTime          Name
-------------          ----
11/6/2017 10:10:11 AM  .localization-config
11/6/2017 10:10:11 AM  .openpublishing.build.ps1
11/6/2017 10:10:11 AM  appveyor.yml
11/6/2017 10:10:11 AM  LICENSE
11/6/2017 10:10:11 AM  LICENSE-CODE
11/6/2017 10:10:11 AM  ThirdPartyNotices
11/6/2017 10:10:15 AM  tests
6/6/2018 7:58:59 PM    CONTRIBUTING.md
6/6/2018 7:58:59 PM    README.md
...

您还可以通过指定降序开关参数以相反的顺序对对象进行排序。

Get-ChildItem |
  Sort-Object -Property LastWriteTime, Name -Descending |
  Format-Table -Property LastWriteTime, Name
LastWriteTime          Name
-------------          ----
12/1/2018 10:13:50 PM  reference
12/1/2018 10:13:50 PM  dsc
...
6/6/2018 7:58:59 PM    README.md
6/6/2018 7:58:59 PM    CONTRIBUTING.md
11/6/2017 10:10:15 AM  tests
11/6/2017 10:10:11 AM  ThirdPartyNotices
11/6/2017 10:10:11 AM  LICENSE-CODE
11/6/2017 10:10:11 AM  LICENSE
11/6/2017 10:10:11 AM  appveyor.yml
11/6/2017 10:10:11 AM  .openpublishing.build.ps1
11/6/2017 10:10:11 AM  .localization-config

使用哈希表

您可以使用数组中的哈希表以不同的顺序对不同的属性进行排序。每个哈希表使用表达式键将属性名称指定为字符串,并使用升序降序键指定排序顺序$true$false表达式键是必需的。 升序降序键是可选的。

以下示例按 LastWriteTime 降序和 Name 升序对对象进行排序。

Get-ChildItem |
  Sort-Object -Property @{ Expression = 'LastWriteTime'; Descending = $true },
                        @{ Expression = 'Name'; Ascending = $true } |
  Format-Table -Property LastWriteTime, Name
LastWriteTime          Name
-------------          ----
12/1/2018 10:13:50 PM  dsc
12/1/2018 10:13:50 PM  reference
11/29/2018 6:56:01 PM  .openpublishing.redirection.json
11/29/2018 6:56:01 PM  gallery
11/24/2018 10:33:22 AM developer
11/20/2018 7:22:19 PM  .markdownlint.json
...

您还可以将脚本块设置为表达式键。运行 Sort-Object cmdlet 时,将执行脚本块并将结果用于排序。

以下示例按 CreationTimeLastWriteTime 之间的时间跨度对对象进行降序排序。

Get-ChildItem |
    Sort-Object -Property @{ Exp = { $_.LastWriteTime - $_.CreationTime }; Desc = $true } |
    Format-Table -Property LastWriteTime, CreationTime
LastWriteTime          CreationTime
-------------          ------------
12/1/2018 10:13:50 PM  11/6/2017 10:10:11 AM
12/1/2018 10:13:50 PM  11/6/2017 10:10:11 AM
11/7/2018 6:52:24 PM   11/6/2017 10:10:11 AM
11/7/2018 6:52:24 PM   11/6/2017 10:10:15 AM
11/3/2018 9:58:17 AM   11/6/2017 10:10:11 AM
10/26/2018 4:50:21 PM  11/6/2017 10:10:11 AM
11/17/2018 1:10:57 PM  11/29/2017 5:48:30 PM
11/12/2018 6:29:53 PM  12/7/2017 7:57:07 PM
...

尖端

您可以省略 Property 参数名称,如下所示:

Sort-Object LastWriteTime, Name

此外,您还可以通过其内置别名 sort 来引用 Sort-Object

sort LastWriteTime, Name

用于排序的哈希表中的键可以缩写为:

Sort-Object @{ e = 'LastWriteTime'; d = $true }, @{ e = 'Name'; a = $true }

在此示例中,e 代表表达式d 代表降序a 代表升序

为了提高可读性,您可以将哈希表放入单独的变量中:

$order = @(
  @{ Expression = 'LastWriteTime'; Descending = $true }
  @{ Expression = 'Name'; Ascending = $true }
)

Get-ChildItem |
    Sort-Object $order |
    Format-Table LastWriteTime, Name

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

取消回复欢迎 发表评论:

关灯