【问题标题】:How to remove empty string in hash如何删除哈希中的空字符串
【发布时间】:2016-08-29 21:01:19
【问题描述】:
{"name"=>"XYZ","address"=>{"street"=>{"street_address"=>"","city"=>"City name"}},"form"=>{"id"=>11,"f_name"=>""},"test"=""}

我想得到:

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

如何删除空字符串?

【问题讨论】:

  • 欢迎来到 Stack Overflow。请阅读“How to Ask”(包括底部的链接)和“minimal reproducible example”。我们希望看到您的努力的证据,或者向我们展示您在尝试查找如何解决此问题的信息时查看的位置,以及为什么这些页面没有帮助的解释,或者显示代码和支持输入和预期输出数据你试过什么。否则,您似乎还没有尝试过并希望我们为您解决问题。

标签: ruby hash


【解决方案1】:
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"
# }

【讨论】:

【解决方案2】:

我试过Proc

 > 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
#     }
# }

【讨论】:

  • 太棒了,除了 ruby​​ 中没有 blank? 方法。请更正它以使其在轨道之外工作,我一定会赞成。 旁注:我没有检查,但我想它也会删除空哈希,OP 中没有有意指定的内容。
  • @mudasobwa : 我已经替换了blank? 方法并更新了我的答案
【解决方案3】:
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

【讨论】:

  • 纯Ruby中没有blank?这样的方法,只有Rails中。
  • @ArtemBiserov 然后请更正答案或将其删除。 OP 中没有指定标签rails
猜你喜欢
  • 1970-01-01
  • 2021-12-23
  • 2013-10-09
  • 1970-01-01
  • 1970-01-01
  • 2020-01-20
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
相关资源
最近更新 更多