在ruby中提取非空值

时间:2012-12-06 02:03:06

标签: ruby

pry(main)> s = {:a =>2, :d=>'foo', :x => '    ', :n => true, :z => nil}
=> {:a=>2, :d=>"foo"}
pry(main)> s.each do |k,v| p k unless v.empty? end

NoMethodError: undefined method `length' for 2:Fixnum

我理解这是因为fixnum没有空方法。那么如何以 slick 的方式解决这个问题,首先找不到讨厌的数据类型,然后检查它?我想打印那些k v有值的true。是{{1}}被视为一个值,但不是一堆空格。对我来说,有价值"表示非空字符,布尔值为true。

2 个答案:

答案 0 :(得分:1)

快速解决方案:

s.each {|k,v| p k unless v.to_s.empty?}

答案 1 :(得分:1)

根据您更新的评论,我认为这就是您想要的。

s = {:a =>2, :d=>'foo', :x => '    ', :n => true, :z => nil}
s.each { |k,v| p(k) if !!v && !v.to_s.strip.empty? }
# :n
# :d
# :a