Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何删除哈希值为空的哈希键?_Ruby On Rails_Ruby_Ruby On Rails 3_Hash_Key Value - Fatal编程技术网

Ruby on rails 如何删除哈希值为空的哈希键?

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

我使用的是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.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