我有一些简单的代码,如下所示:
fruit.each do |c|
c.each do |key, value|
puts value
end
end
Run Code Online (Sandbox Code Playgroud)
这很好用,但感觉不像红宝石.我的目标是采用这个数组:
[{"fruit_id"=>"1"}, {"fruit_id"=>"2"}, {"fruit_id"=>"3"}]
Run Code Online (Sandbox Code Playgroud)
并将其转换为:
[ "1", "2", "3" ]
Run Code Online (Sandbox Code Playgroud)
思考?
wom*_*ton 37
如果它在Rails中或者你已经定义了to_proc,那么你可以比@toholio的解决方案更短一些:
arr = [{"fruit_id"=>"1"}, {"fruit_id"=>"2"}, {"fruit_id"=>"3"}]
out = arr.map(&:values).flatten # => ["1", "2", "3"]
Run Code Online (Sandbox Code Playgroud)
toh*_*lio 19
那么您希望将每个哈希值转换为其值,然后使用其他哈希值中的值进行连接?
in = [{"fruit_id"=>"1"}, {"fruit_id"=>"2"}, {"fruit_id"=>"3"}]
out = in.map{ |item| item.values }.flatten
Run Code Online (Sandbox Code Playgroud)
out那将是["1","2","3"].
dal*_*lpo 13
@wombleton @aronchick我建议使用"flat_map(&:values)"代替"map(&:values).flatten"以获得更好的性能.
arr = [{"fruit_id"=>"1"}, {"fruit_id"=>"2"}, {"fruit_id"=>"3"}]
out = arr.flat_map(&:values)
Run Code Online (Sandbox Code Playgroud)
在这里查看更多信息:http://gistflow.com/posts/578-use-flat_map-instead-of-map-flatten
如果使用map !,则不会在内存中创建另一个数组
a.map! {|h| h.values}.flatten
Run Code Online (Sandbox Code Playgroud)
这也可以写成
a.map!(&:values).flatten!
Run Code Online (Sandbox Code Playgroud)
还查看注释,在ruby 1.9.3中有一个方法flat_map(http://ruby-doc.org/core-1.9.3/Enumerable.html#method-i-flat_map)将执行地图和展平一口气。
a.flat_map(&:values)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28528 次 |
| 最近记录: |