PHP脚本转PowerShell时关联数组$key=>$value遍历写法咨询
答案
正确性验证
你自行编写的实现逻辑是正确的,PowerShell 中遍历关联数组(哈希表)键值对的标准方案就是调用 GetEnumerator() 方法,每个枚举项的 Name/Key 属性对应 PHP 中的 $key,Value 属性对应 PHP 中的 $value,和 PHP $key=>$value 遍历语法的作用完全对等。
可优化点
你的实现存在两个可优化的细节:
- 数组拼接操作
+=每次都会生成新的数组对象,当$extension_data数据量较大时性能损耗明显 - 赋值时的子表达式包裹
$($e.name)是多余的,无需额外包裹
更优实现方案
更符合 PowerShell 编码习惯的管道写法,代码更简洁,性能也更好:
$data = $extension_data.GetEnumerator() | ForEach-Object { @{ name = $_.Key value = $_.Value } }
如果你需要生成的是可直接用属性访问的自定义对象,而非哈希表,可以调整为:
$data = $extension_data.GetEnumerator() | ForEach-Object { [PSCustomObject]@{ name = $_.Key value = $_.Value } }
额外说明
- 如果你的
$extension_data是通过[ordered]@{}创建的有序字典,GetEnumerator()会严格保留键的原始顺序,和 PHP 关联数组的遍历行为完全一致 - 遍历过程中如果需要修改原哈希表的键值,需要先将枚举结果转为数组再遍历,避免枚举过程中集合被修改报错:
foreach($e in $extension_data.GetEnumerator() | ForEach-Object { $_ }) { ... }
内容的提问来源于stack exchange,提问作者Patrick
相关产品推荐
相关产品推荐

