AdminOfThings 的有用答案显示了一种提供基于键的值访问的方法,即[pscustomobject]
.
一般而言,您正在寻找字典或哈希表(哈希表):允许通过关联键有效查找值的键值对集合。
实际上,[pscustomobject]
链接答案中的技术在语法上基于 PowerShell 的哈希表文字语法@{ <key> = <value>; ... }
[1]。
为简洁起见,使用脚本块 ( { ... }
) 而不是脚本/函数的示例:
$output = & {
# Output a hashtable
@{ x = 'one'; y = 'two' }
}
# Access the entries by key:
# Index syntax:
$output['x'] # -> 'one'
$output['y'] # -> 'two'
# Dot notation, as with objects, works too.
# While this is convenient, it is much slower with variable-based keys;
# e.g., $output.$keyName - this typically won't matter, but may in loops
# with a high number of iterations.
$output.x # -> 'one'
$output.y # -> 'two'
如果枚举条目的顺序很重要,请使用有序哈希表(PSv3+): [ordered] @{ <key> = <value>; ... }
。
使用有序哈希表只需支付微不足道的性能损失,因此我建议您养成使用[ordered]
习惯,因为它可以提供更好的输出和调试体验,以按照定义条目的顺序查看条目。
在 a[pscustomobject]
和哈希表之间进行选择:
如果性能很重要(在具有多次迭代的循环中):
[1] 但是请注意,这[pscustomobject] @{ ... }
是直接构造自定义对象的语法糖——没有创建中间哈希表;此外,由哈希表键定义的属性是按定义顺序定义的,而哈希表保证不对其条目进行特定排序,除非您使用.[ordered] @{ ... }