Ruby on rails 如何删除哈希值为空的哈希键?
我使用的是RubyonRails3.2.13,我想删除相应哈希值为空的哈希键。也就是说,如果我有以下散列Ruby on rails 如何删除哈希值为空的哈希键?,ruby-on-rails,ruby,ruby-on-rails-3,hash,key-value,Ruby On Rails,Ruby,Ruby On Rails 3,Hash,Key Value,我使用的是RubyonRails3.2.13,我想删除相应哈希值为空的哈希键。也就是说,如果我有以下散列 { :a => 0, :b => 1, :c => true, :d => "", :e => " ", :f => nil } 然后得到的哈希值应该是(注意:0和true不被视为空) 我该怎么做呢?如果使用Rails,你可以试试 hash.delete_if { |key, value| value.blank? } 或者仅仅是Ruby hash
{ :a => 0, :b => 1, :c => true, :d => "", :e => " ", :f => nil }
然后得到的哈希值应该是(注意:0
和true
不被视为空)
我该怎么做呢?如果使用Rails,你可以试试
hash.delete_if { |key, value| value.blank? }
或者仅仅是Ruby
hash.delete_if { |key, value| value.to_s.strip == '' }
有很多方法可以完成这个共同的任务 拒绝 这是我在清理哈希时最常用的一个,因为它简短、干净、灵活,足以支持任何条件,并且不会改变原始对象。下面是一篇关于ruby中不变性的好处的文章
hash.reject {|_,v| v.blank?}
注意:上面示例中的下划线用于表示我们希望解压缩传递给proc的元组,但我们不使用第一个值(键)
拒绝
但是,如果要修改原始对象,请执行以下操作:
hash.reject! {|_,v| v.blank?}
选择
相反,使用select,它将仅返回在计算时返回true的值
hash.select {|_,v| v.present? }
选择!
…和变异版本
hash.select {|_,v| v.present? }
契约
最后,当您仅需要删除具有nil
值的键时
hash.compact
契约
您现在已经选择了该模式,但这是修改原始哈希的版本
hash.compact!
关于TechVinet的解决方案,当value=[]时,请注意以下几点。
你想保持
:g=>[]
和h=>{}
?值。to_.strip.empty?
比='
,IMO.读起来好一点。另外,你不需要Rails将设为空?
,只需要ActiveSupport。如果该值是一个空的散列呢?或者进一步的嵌套哈希是空的?
hash.compact!
[].blank? => true
[].to_s.strip == '' => false
[].to_s.strip.empty? => false