我正在尝试使用 PowerShell 对表示应用程序版本的对象进行排序
$versionsObjects = @{
Major = 3
Minor = 2
Bugfix = 1
},
@{
Major = 3
Minor = 5
Bugfix = 1
},
@{
Major = 1
Minor = 2
Bugfix = 1
},
@{
Major = 4
Minor = 2
Bugfix = 1
}
$sortedVersions = ($versionsObjects | Sort-Object -Property @{Expression="Major"; Descending=$true}, @{Expression="Minor" ;Descending=$true}, @{Expression="Bugfix"; Descending=$true})
$sortedVersions | %{echo ( "{0}.{1}.{2}" -f $_.Major, $_.Minor, $_.Bugfix)}
Run Code Online (Sandbox Code Playgroud)
输出与输入的顺序相同:
3.2.1
3.5.1
1.2.1
4.2.1
Run Code Online (Sandbox Code Playgroud)
但应该是
4.2.1
3.5.1
3.2.1
1.2.1
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
你的表达不太对。试试这个 Sort-Object 部分:
Sort-Object -Property @{Expression={$_.Major}; Descending=$true}, @{Expression={$_.Minor} ;Descending=$true}, @{Expression={$_.Bugfix}; Descending=$true})
Run Code Online (Sandbox Code Playgroud)
如果你至少在 powershell v3.0 中,你可以这样做:
$versionsObjects = [ordered]@{
Major = 3
Minor = 2
Bugfix = 1
},
[ordered]@{
Major = 3
Minor = 5
Bugfix = 1
},
[ordered]@{
Major = 1
Minor = 2
Bugfix = 1
},
[ordered]@{
Major = 4
Minor = 2
Bugfix = 1
}
$versionsObjects | % { $_.values -join '.' } | sort -Descending {[version]$_ }
Run Code Online (Sandbox Code Playgroud)
或对于所有版本:
$versionsObjects = @{
Major = 3
Minor = 2
Bugfix = 1
},
@{
Major = 3
Minor = 5
Bugfix = 1
},
@{
Major = 1
Minor = 2
Bugfix = 1
},
@{
Major = 4
Minor = 2
Bugfix = 1
}
$versionsObjects | % { $_.Major,$_.Minor,$_.bugfix -join '.' } | sort -Descending {[version]$_ }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8009 次 |
| 最近记录: |