PowerShell中更新哈希表数组内哈希表值的问题排查
问题原因及解决办法
问题根源
你创建哈希表数组的方式@(@{})*$idRange.Count存在本质问题:这种写法并没有生成$idRange.Count个独立的哈希表,而是把同一个哈希表的引用复制了多次放进数组里。数组里的所有元素本质上指向内存中同一个哈希表对象,所以每次循环修改其中一个元素的id属性时,所有元素都会同步变化——因为它们本来就是同一个东西。
正确实现方式
方式一:通过循环逐个创建独立哈希表
[array] $idRange= @(1, 2, 3) [hashtable[]] $aoo = @() foreach ($id in $idRange) { # 每次循环都新建一个哈希表 $newHash = @{} $newHash['id'] = $id $aoo += $newHash }
方式二:用For循环初始化数组的每个元素
[array] $idRange= @(1, 2, 3) # 先创建指定长度的空哈希表数组 [hashtable[]] $aoo = New-Object hashtable[] $idRange.Count for ($i=0; $i -lt $idRange.Count; $i++) { # 为数组的每个索引位置新建哈希表 $aoo[$i] = @{} $aoo[$i]['id'] = $idRange[$i] }
验证结果
运行上述任意一种写法,都会得到你预期的结果:
@(@{'id'=1}, @{'id'=2}, @{'id'=3})
内容的提问来源于stack exchange,提问作者mitjajez
相关产品推荐
相关产品推荐

