PowerShell 5.1中如何让哈希表保持元素添加顺序?
在PowerShell 5.1中让哈希表保持添加顺序
PowerShell 5.1里用@{}默认创建的是标准Hashtable,这类哈希表本身是无序的,内部会根据键的哈希值存储元素,所以输出顺序和你添加元素的顺序不会一致。要实现按添加顺序保存元素,你需要使用有序哈希表,有两种常用实现方式:
方法1:使用[ordered]修饰符创建有序哈希表
这是PowerShell 3.0及以上版本支持的简洁写法,直接在哈希表字面量前加上[ordered]关键字即可:
$rshash = [ordered]@{} $rshash += @{ "test"=1 } $rshash += @{ "apple"="m" } $rshash += @{ "map"="d" } $rshash
运行结果会严格按照元素添加顺序输出:
Name Value ---- ----- test 1 apple m map d
方法2:直接实例化OrderedDictionary类
如果你需要更明确地指定类型,可以直接创建System.Collections.Specialized.OrderedDictionary的实例:
$rshash = New-Object System.Collections.Specialized.OrderedDictionary $rshash.Add("test", 1) $rshash.Add("apple", "m") $rshash.Add("map", "d") $rshash
这个写法的运行结果和方法1完全一致,同样会严格保留元素的添加顺序。
注意:两种方法创建的有序哈希表,用法和普通哈希表基本一致,你可以正常进行键值对的添加、读取、修改操作。
内容的提问来源于stack exchange,提问作者Rod
相关产品推荐
相关产品推荐

