You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell向hashtable按序添加元素后输出顺序不符如何解决

解决方案

首先明确问题根源:PowerShell 中默认用@{}创建的是普通Hashtable对象,这类结构底层基于哈希索引存储,天生不保证保留元素插入顺序,输出顺序由键的哈希值和存储逻辑决定,所以出现你看到的乱序情况。
你之前尝试的$aDomains = $aDomains | Sort-Object无效的原因是:该操作会把哈希表的键值对拆解为独立的DictionaryEntry对象排序,最终返回的是数组而非哈希表结构,既不符合你后续要使用哈希表的要求,也不会改变原有哈希表的存储顺序。

适配你要求的修正方案

你要求必须使用@{}声明结构,只需要在声明时添加[ordered]修饰符即可,这是PowerShell 3.0及以上版本原生支持的语法:

# 仅修改第一行声明,其余逻辑完全不需要改动
$aDomains = [ordered]@{}

$aDomains['a-test.nl'] = @{}
$aDomains['b-test.nl'] = @{}
$aDomains['c-test.nl'] = @{}
$aDomains['d-test.nl'] = @{}
$aDomains['e-test.nl'] = @{}

$aDomains

修改后输出就会严格和你插入元素的顺序保持一致:

Name                           Value
----                           -----
a-test.nl                      {}
b-test.nl                      {}
c-test.nl                      {}
d-test.nl                      {}
e-test.nl                      {}

方案说明

  • [ordered]@{}创建的是OrderedDictionary对象,完全兼容普通哈希表的所有增删改查语法,你后续的脚本逻辑不需要做任何改动,完全满足你要求的用@{}声明结构的规则。
  • 如果你已经创建了普通哈希表,且需要按自定义顺序(比如字母序)输出,不需要修改原哈希表结构,可以在输出时单独排序:
    $aDomains.GetEnumerator() | Sort-Object Name
    
    该操作不会改变原有哈希表的结构,仅输出时按指定规则排序。

内容的提问来源于stack exchange,提问作者LPChip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 14:45:03