ruby 更短的数组迭代
ruby shorter array iteration
我正在尝试找出是否有更短的方法来执行以下代码:
$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-table
和colorize
的使用
这个怎么样:
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
语句,但这至少是一个改进。
我正在尝试找出是否有更短的方法来执行以下代码:
$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-table
和colorize
这个怎么样:
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
语句,但这至少是一个改进。