首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(哈希表的)排序哈希表

(哈希表的)排序哈希表
EN

Stack Overflow用户
提问于 2020-02-12 21:47:18
回答 1查看 128关注 0票数 0

我试图得到一个哈希表的哈希表排序。排序的行为似乎是将哈希表转换成其他的东西,而我无法遍历新的结构。

代码语言:javascript
复制
$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转储到控制台的两行看起来都很好。但是第二个循环集什么也不做。我试过这样做

代码语言:javascript
复制
$sortedHashTable = [hashtable]($mainHashTable.GetEnumerator() | sort-object -property name)

这只会抛出错误

无法将"System.Object[]“类型的"System.Object[]”值转换为"System.Collections.Hashtable“类型。

那么,有没有办法将系统对象转换为哈希表,这样循环结构就可以处理排序的结果了吗?还是我最好学着走System.Object的结构呢?(也许在学术上),是否有办法对哈希表进行排序并返回哈希表?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-12 22:27:23

您目前正在做的是将哈希表拆分为一个单独条目列表(通过.GetEnumerator()),然后对其进行排序--因此,最终您将$sortedHashTable作为一个key/value对对象数组,按键排序,而不是实际的[hashtable]

有办法对哈希表进行排序并返回哈希表吗?

不-您不能“排序哈希表”内联,因为哈希表不保留任何保证的密钥顺序。

这里的方法是将条目复制到有序的字典中,以便:

代码语言:javascript
复制
$sortedHashTable = [ordered]@{}

# Sort the keys, then insert into our ordered dictionary
foreach($key in $mainHashTable.Keys |Sort-Object){
    $sortedHashTable[$key] = $mainHashTable[$key]
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60197377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档