Dan*_*n P 12 sorting powershell hashtable
我在排序哈希表时遇到问题.我已经将我的代码分解为只是必需品,以免用原始脚本压倒任何人.
Write-Host "PowerShell Version = " ([string]$psversiontable.psversion)
$h = @{}
$Value = @{SortOrder=1;v1=1;}
$h.Add(1, $Value)
$Value = @{SortOrder=2;v1=1;}
$h.Add(2, $Value)
$Value = @{SortOrder=3;v1=1;}
$h.Add(3, $Value)
$Value = @{SortOrder=4;v1=1;}
$h.Add(4, $Value)
Write-Host "Ascending"
foreach($f in $h.GetEnumerator() | Sort-Object Value.SortOrder)
{
Write-Host $f.Value.SortOrder
}
Write-Host "Descending"
foreach($f in $h.GetEnumerator() | Sort-Object Value.SortOrder -descending)
{
Write-Host $f.Value.SortOrder
}
Run Code Online (Sandbox Code Playgroud)
输出是
PowerShell Version = 3.0
Ascending
2
1
4
3
Descending
2
1
4
3
Run Code Online (Sandbox Code Playgroud)
我确信这只是一个不知道正确用法的简单案例Sort-Object
.排序正常,Sort-Object Name
所以它可能与不知道如何处理Value.SortOrder
?
Aar*_*sen 24
Sort-Object接受用于排序的属性名称或脚本块.由于您尝试对属性的属性进行排序,因此您需要使用脚本块:
Write-Host "Ascending"
$h.GetEnumerator() |
Sort-Object { $_.Value.SortOrder } |
ForEach-Object { Write-Host $_.Value.SortOrder }
Write-Host "Descending"
$h.GetEnumerator() |
Sort-Object { $_.Value.SortOrder } -Descending |
ForEach-Object { Write-Host $_.Value.SortOrder }
Run Code Online (Sandbox Code Playgroud)
您可以使用Where-Object cmdlet 进行过滤:
Write-Host "Ascending"
$h.GetEnumerator() |
Where-Object { $_.Name -ge 2 } |
Sort-Object { $_.Value.SortOrder } |
ForEach-Object { Write-Host $_.Value.SortOrder }
Run Code Online (Sandbox Code Playgroud)
您通常希望Where-Object
在任何Sort-Object
cmdlet 之前放置,因为它使排序更快.
归档时间: |
|
查看次数: |
16358 次 |
最近记录: |