Ruby 如何删除散列中的空字符串

Ruby 如何删除散列中的空字符串,ruby,hash,Ruby,Hash,我想得到: {"name"=>"XYZ","address"=>{"street"=>{"street_address"=>"","city"=>"City name"}},"form"=>{"id"=>11,"f_name"=>""},"test"=""} 如何删除空字符串?我用Proc {"name"=>"XYZ","address"=>{"street"=>{"city"=>"City name"}},"form"=

我想得到:

{"name"=>"XYZ","address"=>{"street"=>{"street_address"=>"","city"=>"City name"}},"form"=>{"id"=>11,"f_name"=>""},"test"=""}

如何删除空字符串?

我用
Proc

{"name"=>"XYZ","address"=>{"street"=>{"city"=>"City name"}},"form"=>{"id"=>11}}
hash = {"name"=>"XYZ",
        "address"=>{"street"=>{"street_address"=>"","city"=>"City name"}},
        "form"=>{"id"=>11,"f_name"=>""},
        "test"=>""}

def remove_blanks hash
  hash.map do |k, v|
    v == '' ? nil : [k, v.is_a?(Hash) ? remove_blanks(v) : v]
  end.compact.to_h
end

remove_blanks hash

#⇒ {
#  "address" => {
#    "street" => {
#      "city" => "City name"
#    }
#  },
#     "form" => {
#    "id" => 11
#  },
#     "name" => "XYZ"
# }

@安德雷迪内科感谢,;我刚刚写了一个小的,这可能就是为什么:)太棒了,除了ruby中没有
blank?
方法之外。请纠正它,使其工作以外的轨道,我一定会投票。旁注:我没有检查,但我想它也会删除空散列,这在OP中不是故意指定的。@mudasobwa:我有replace
blank?
方法并更新了我的答案在纯Ruby中没有这样的方法
blank?
,只有在Rails中。@ArtemBiserov然后请更正答案,或者删除它。OP中没有指定标记
rails
。欢迎使用堆栈溢出。请阅读“”,包括底部的链接,以及“”。我们希望看到您所做努力的证据,或者向我们展示您在试图找到如何解决此问题的信息时所看到的位置,并解释为什么这些页面没有帮助,或者编写代码并支持输入和预期输出数据,显示您所做的尝试。如果没有这一点,你似乎还没有尝试,希望我们为你解决问题。
 > hash = {"name"=>"XYZ","address"=>{"street"=>{"street_address"=>"","city"=>"City name"}},"form"=>{"id"=>11,"f_name"=>""},"test"=>""}
 > remove_blank = Proc.new { |k, v| v.delete_if(&remove_blank) if v.is_a?(Hash); v == "" }
 > hash.delete_if &remove_blank
 #Output:

# {
#   "name"=>"XYZ", 
#   "address"=>
#     {
#       "street"=>
#         {
#           "city"=>"City name"
#         }
#     }, 
#   "form"=>
#     {
#       "id"=>11
#     }
# }
require 'active_support/core_ext/object/blank'

def clean_hash(hash)
  hash.each do |key, value|
    if value.is_a?(Hash)
      clean_hash(value)
    else
      hash.delete(key) if value.blank?
    end
  end
end