ruby短数组迭代

时间:2016-05-23 13:59:05

标签: arrays ruby colorize

我试图找出是否有更短的方法来执行以下代码:

$my_array.each do |eh|
  row = Array.new
  eh.each do |k,v|
    if  k == 'state'
      if eh[k] ==  "stopped"
         row << eh[k].red
      elsif eh[k] ==  "running"
         row << eh[k].green
      else 
        row << eh[k].yellow
      end 
    else
     row << eh[k] 
    end 
  end 
  data << row 
end

以上内容适用于terminal-tablecolorize

1 个答案:

答案 0 :(得分:5)

这个怎么样:

color_map = { 'stopped' => :red, 'running' => :green }
data = $my_array.map do |eh|
  eh.map do |k,v|
    if  k == 'state'
      v.send color_map.fetch(v, :yellow)
    else
      v 
    end 
  end 
end

它使用map而不是each来避免手动构建数组。它还使用哈希将状态映射到颜色,而不是使用if语句。

如果您愿意,可以进一步删除内部if语句,但这至少是一种改进。