新手问题 ruby 小技巧 String.empty? with a default value

jerrychen2008 · 2015年02月11日 · 最后由 jerrychen2008 回复于 2015年02月13日 · 2296 次阅读

本人是 ruby 新手 最近在学习实践 ruby 的优雅性;下面的代码是实现了我的功能,但是我在想是否有其他方式呢? 代码如下

unless city['MonPointList'].nil?
    city['MonPointList'].each_with_index do |monitor,index|
      a =[]
      a << monitor['MonPointName']
      a << monitor['Real_CO']
      a << monitor['Real_NO2']
      a << monitor['Real_O3']
      a << monitor['Real_PM10']
      a << monitor['Real_SO2']
      a << monitor['Real_PM2_5']
      a << monitor['Real_AQI']
      a.each_with_index do |single,index|
        a[index] = "-" if single.empty?
      end
      puts index.to_s + "|" + a.join("|")
    end
  end

问题 1 如何改写上面的代码,我的要求是,当 monitor['Real_O3']="" 时 让 monitor['Real_O3']=“-” 事实上 monitor['Real_O3'] 就是“”所以 a << monitor['Real_O3'] || "-" 肯定是不行了,so how? 问题 2 假如上面的方式是优雅的,那么 如何更优雅的处理 array 的 element ;

a.each_with_index do |single,index|
       a[index] = "-" if single.empty?
     end

monitor['Real_O3'].blank? ? "-" : monitor['Real_O3']

感觉你这个 a 应该用 hash 而不是 array

3 楼 已删除

我没看懂要做什么。

结果就是你所谓的 a

%w[MonPointName Real_CO Real_NO2].map { |key| monitor[key].presence || '-' }

首先,感谢各位的回复! @rei ,这个是一段解析 json 的代码

%w[MonPointName Real_CO Real_NO2].collect{|key| 
  monitor[key].blank? ? '-' : monitor[key]}.join("|")
8 楼 已删除

monitor[key].presence || '-'

@darkbaby123 @est presence 没有用过,谢谢!

需要 登录 后方可回复, 如果你还没有账号请 注册新账号