powershell - 排序哈希表(哈希表)
问题描述
我碰壁试图让哈希表的哈希表进行排序。似乎排序的行为是将哈希表变成了别的东西,我无法走新结构。
$mainHashTable = @{}
$mainHashTable.Add('B', @{'one'='B1'; 'two'='B2'; 'three'='B3'})
$mainHashTable.Add('D', @{'one'='D1'; 'two'='D2'; 'three'='D3'})
$mainHashTable.Add('A', @{'one'='A1'; 'two'='A2'; 'three'='A3'})
$mainHashTable.Add('C', @{'one'='C1'; 'two'='C2'; 'three'='C3'})
CLS
$mainHashTable
foreach ($hashtable in $mainHashTable.keys) {
foreach ($itemKey in $mainHashTable.$hashtable.keys) {
Write-Host "$itemKey $($mainHashTable.$hashtable.$itemKey)!"
}
}
Write-Host
$sortedHashTable = $mainHashTable.GetEnumerator() | sort-object -property name
$sortedHashTable
foreach ($hashtable_S in $sortedHashTable.keys) {
foreach ($itemKey_S in $sortedHashTable.$hashtable_S.keys) {
Write-Host "$itemKey_S $($sortedHashTable.$hashtable_S.$itemKey2)!"
}
}
转储$mainHashTable
&$sortedHashTable
到控制台的两行看起来一切都很好。但是第二个循环组什么也不做。我试过这样铸造
$sortedHashTable = [hashtable]($mainHashTable.GetEnumerator() | sort-object -property name)
这只会引发错误
无法将“System.Object[]”类型的“System.Object[]”值转换为“System.Collections.Hashtable”类型。
那么,有没有办法将系统对象转换为哈希表,以便循环结构对排序结果起作用?还是我最好学习走 System.Object 的结构?而且(也许在学术上),有没有办法对哈希表进行排序并取回哈希表?
解决方案
您当前正在做的是将哈希表拆分为单独条目的列表(通过.GetEnumerator()
),然后对其进行排序-因此您最终$sortedHashTable
只是一个key
/value
对对象数组,按键排序,而不是实际的[hashtable]
.
有没有办法对哈希表进行排序并取回哈希表?
不-您不能内联“对哈希表进行排序”,因为哈希表不保留任何保证的键顺序。
这里的方法是将条目复制到有序字典中,按顺序:
$sortedHashTable = [ordered]@{}
# Sort the keys, then insert into our ordered dictionary
foreach($key in $mainHashTable.Keys |Sort-Object){
$sortedHashTable[$key] = $mainHashTable[$key]
}
推荐阅读
- html - 省略号(三个点)不会显示较长的文本
- java - 在单击按钮之前无法接收正确的 http 请求
- javascript - 无法使用输入更新 v-model
- asp.net-mvc - 在一列中显示 ICollection 值
- android - 如何在 React-Native for Android 的状态栏顶部放置一个视图?
- flutter - 如何防止抽屉丢弃?
- javascript - 如何将对象迭代到平面列表中 - 反应原生?
- c++ - 关于编译单元和 Schwarz Counter 和单例模式
- python - Python:使用 for 循环更改变量后缀
- node.js - node.js:错误:错误:0B080074:x509 证书例程:X509_check_private_key:键值不匹配