2011-04-05 65 views

回答

2

无需迭代。 Array#join将递归工作,并且flatten不是必需的。

{"a"=>2, "d"=>5, "f"=>1, "g"=>1, "h"=>1, "i"=>1, "z"=>2}.to_a.join 
# => a2d5f1g1h1i1z2 

require 'benchmark' 
h = {"a"=>2, "d"=>5, "f"=>1, "g"=>1, "h"=>1, "i"=>1, "z"=>2} 
n = 1000000 
Benchmark.bm do |x| 
    x.report('to_a'){n.times{h.to_a.join}} 
    x.report('flatten'){n.times{h.flatten.join}} 
end 

     user  system  total  real 
to_a 5.510000 0.000000 5.510000 ( 5.509186) 
flatten 6.200000 0.000000 6.200000 ( 6.219246) 
+1

......但如果你确实想:'散。每个{| k,v |打印k,v}' – Phrogz 2011-04-05 05:04:25

+0

是否仅限于1.9.2? – kurumi 2011-04-05 05:06:23

+0

我返回一个没有方法错误。我使用的是Ruby 1.9.2,这是对象是Hash类的一个实例。 – 2011-04-05 05:06:32

1
>> {"a"=>2, "d"=>5, "f"=>1, "g"=>1, "h"=>1, "i"=>1, "z"=>2}.flatten.join 
=> "a2d5f1g1h1i1z2" 
2

这里有几个:

> {"a"=>2, "d"=>5, "f"=>1, "g"=>1, "h"=>1, "i"=>1, "z"=>2}.flatten.join 
=> "a2d5f1g1h1i1z2" 
> {"a"=>2, "d"=>5, "f"=>1, "g"=>1, "h"=>1, "i"=>1, "z"=>2}.inject('') {|s,v| s << "#{v.join}"} 
=> "a2d5f1g1h1i1z2"