比較不工作時,我有以下方法來刪除我的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 ...'。 –