給定一個包含任意數量項的字典的有序字典,我需要對其中一項的值進行排序。所以
$data = [Ordered]@{
'1' = @{'thing' = "3"}
'2' = @{'thing' = "2"}
'3' = @{'thing' = "1"}
}
按 的值排序thing將產生與
$ordered = [Ordered]@{
'3' = @{'thing' = "1"}
'2' = @{'thing' = "2"}
'1' = @{'thing' = "3"}
}
我可以使用它自己的鍵對第一個字典進行排序.GetEnumerator(),但我很難理解如何根據嵌套鍵的值進行排序,但仍會抓取最外層字典中的專案以添加到新的[Ordered]. 我從這個開始
$data = [Ordered]@{
'1' = @{'thing' = "3"}
'2' = @{'thing' = "2"}
'3' = @{'thing' = "1"}
}
$ordered = [ordered]@{}
foreach ($item in ($keyStatus.GetEnumerator() | Select-Object Value | Sort-Object -Property Value)) {
$ordered[$item.Key] = $item.Value
}
但當然是在 foreach 上的錯誤。我懷疑這將是一個深夜的臉掌時刻,但它確實存在。
而且,對于像我這樣更喜歡有意義的示例而不是最小示例的任何人來說,真實資料看起來更像這樣
$data = [Ordered]@{
'{GUID}' = @{'DisplayName' = "Program A"; 'DisplayVersion' = '1.2'}
'{GUID}' = @{'DisplayName' = "Program Z"; 'DisplayVersion' = '0.5'}
'{GUID}' = @{'DisplayName' = "Program M"; 'DisplayVersion' = '3.4'}
}
哪里{GUID}會有不同的實際 GUID,這是我想要構建資料的方式。但我想然后呈現按 . 排序的資料DisplayName。
uj5u.com熱心網友回復:
正如評論中所解釋的,在排序后,它將不再是一個,OrderedDictionary而只是一個DictionaryEntry. 如果你想重建它,你可以遵循這個邏輯:
$data = [Ordered]@{
[guid]::NewGuid() = @{'DisplayName' = "Program A"; 'DisplayVersion' = '1.2'}
[guid]::NewGuid() = @{'DisplayName' = "Program Z"; 'DisplayVersion' = '0.5'}
[guid]::NewGuid() = @{'DisplayName' = "Program M"; 'DisplayVersion' = '3.4'}
}
$newDict = [ordered]@{}
$data.GetEnumerator() | Sort-Object { $data[$_.Key]['DisplayName'] } | ForEach-Object {
$newDict[$_.Key] = $_.Value
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/510499.html
標籤:电源外壳排序字典
上一篇:C插入排序不是從最小到最大排序
