我有一个哈希,其键是数字,其值是数组。给定一个数字 boundary
,我想调整哈希中大于 boundary
的所有键。
我尝试过这个:
header_info_hash.each do |k, v|
if boundary < k
val = header_info_hash[k]
header_info_hash.delete(k)
header_info_hash[k-1] = val
end
end
但它会引发错误:
RuntimeError: can't add a new key into hash during iteration
有什么更简单的方法可以做到这一点?请注意,我想对此数据结构进行更改,而不是创建新的数据结构。
最佳答案
What is an easier way to do this?
永远不要修改您正在迭代的集合。 (除非您确切知道为什么必须这样做)。相反,克隆/复制集合。您现在拥有同一事物的两个副本。迭代一个,但修改另一个。
完成后,用修改后的副本替换原始副本(可选,根据要求)。
在这种情况下,没有必要在迭代之前克隆哈希,然后从中删除键。您可以构建一个新的哈希,所有键都已“调整”(无论这意味着什么)。
new_header_info_hash = header_info_hash.each_with_object({}) do |(k, v), result|
if boundary < k
result[k-1] = v
else
result[k] = v
end
end
关于ruby - 获取 "can' t 在迭代期间将新 key 添加到哈希中”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47224116/