比较不工作时,我有以下方法来删除我的Rails应用程序从一个Ruby散列指定值:红宝石哈希“delete_if”空哈希
def remove_hash_values(hash, target = nil)
hash.delete_if {|key, value| value == target}
hash.each_value {|obj| remove_hash_values(obj, target) if obj.is_a?(Hash)}
end
事情是这样工作的:
remove_hash_values(some_hash, :some_symbol)
然而,这并不不工作:
remove_hash_values(some_hash, {})
它在irb
工程,这是让我困惑。我是正确的正确的散列正在通过(检查与许多puts
陈述)。我的Ruby版本是ruby-2.0.0-p247
,我正在使用Rails 3.任何帮助将不胜感激。
编辑:这不是工作,或者:
def remove_hash_values(hash, target = nil)
hash.each do |key, value|
hash.delete(key) if value == target
end
hash.each_value {|obj| remove_hash_values(obj, target) if obj.is_a?(Hash)}
end
到底我做错了什么?
编辑2:刚才意识到我实际上使用的是HashWithIndifferentAccess
,而不是Hash
。这可能会导致一些欺骗,所以我会尝试先将它转换为Hash
并回报。
我看不出有什么错# 1,但在#2中,您正在迭代散列的元素,这是一个禁忌。为此,请尝试迭代键:'hash.keys.each do | key | hash.delete(key)if hash [key] == target; end'后跟'hash.each_value ...'。 –