我有一个散列这样的数据:我该如何将这个Ruby哈希转换为数组?
[{"total_time"=>"00:04:48.563044"}, {"total_time"=>"00:05:29.835918"}, {"total_time"=>"00:09:38.622569"}]
但我想这一点:
["00:04:48.563044", "00:05:29.835918", "00:09:38.622569"]
需要使用Ruby 1.8.7工作。
我有一个散列这样的数据:我该如何将这个Ruby哈希转换为数组?
[{"total_time"=>"00:04:48.563044"}, {"total_time"=>"00:05:29.835918"}, {"total_time"=>"00:09:38.622569"}]
但我想这一点:
["00:04:48.563044", "00:05:29.835918", "00:09:38.622569"]
需要使用Ruby 1.8.7工作。
你可能会与此管理:
list.collect(&:values).flatten
有一吨的方式来做到这一点。让我们把它分解成你需要完成的基本步骤:
既然你想抓住每个项目的结果,而不只是看它,你会想要使用map
(或collect
,他们是现实相同的方法)。这将处理步骤1和步骤3.步骤2本身非常简单。您只需要获得item['total_time']
的密钥值。把它放在一起,和你有这样的:
times.map{ |time| time['total_time'] }
谈到一吨的方式来实现这一点:
a = [{"total_time"=>"00:04:48.563044"}, {"total_time"=>"00:05:29.835918"}, {"total_time"=>"00:09:38.622569"}]
p a.map(&:flatten).map(&:last)
这不适用于1.8.7('Hash'没有'flatten')。 – 2012-01-13 20:37:56
@undur_gongor然后请把它当作好奇心 – maprihoda 2012-01-13 20:45:44
'collect'是一样的'map'对于那些不太熟悉红宝石。此外,可以使用“collect!”或“map!”来对对象进行变异,而不是创建新对象。 – Nick 2012-01-13 19:15:49
这太复杂了,一个简单的地图会做... – tokland 2012-01-13 19:40:45
在这个非常特殊的情况下,map调用可能更简单,但是我发布的这个片段是一个适用于各种环境的通用模式。这是“给我从一维数组中的多个散列值”的方法。 – tadman 2012-01-13 20:32:12