你好,我需要更改 if block 内哈希的键,并在每个循环中为每个键附加一些值我已经完成了,但它确实有效,但每次运行都会不断变化并返回不同的结果。
假设散列称为散列,我正在检查它是否有任何散列而不是更改它们的键值
我是这样的
...
hash.each {|key,value|
if hash[key].is_a?(Hash)
hash[:"Match #{key}"] = hash[key]
hash.delete(key)
....
puts hash.keys
end
}
...
使用此代码段,第一次运行返回良好,但后续运行会混淆并给出很多重复的值,每次给出不同的结果。
就像运行 1 一样
Match User gideon
假设我在提供的散列中有一个用户 gideon key 散列,它是正确的,但它是非常不可预测的
第二轮
Match User gideon
Match Match User gideon
Match Match Match User gideon
Match Match Match Match User gideon
Match Match Match Match Match User gideon
Match Match Match Match Match Match User gideon
所以破坏一切 帮助表示赞赏
最佳答案
假设:
h = { :bacon=>"good", 3=>{:waffles=>"yum"}, :stack=>{"pancakes"=>"OK"} }
我假设您想将其转换为:
h = { :bacon=>"good", :"Match 3"=>{:waffles=>"yum"},
:"Match stack"=>{"pancakes"=>"OK"} }
这是您可以做到这一点的一种方法:
h.keys.each { |k| (h[:"Match #{k}"] = h.delete(k)) if h[k].is_a? Hash }
h
此示例的灵感来自@muistooshort(又名 μ)的工作。
关于ruby-on-rails - 在 if block 中更改和编辑哈希的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26165855/