我有以下散列:迭代通過哈希,在一行返回的所有值作爲字符串
{"a"=>2, "d"=>5, "f"=>1, "g"=>1, "h"=>1, "i"=>1, "z"=>2}
在Ruby中,你如何通過哈希迭代顯示a2d5f1g1h1i1z2
我有以下散列:迭代通過哈希,在一行返回的所有值作爲字符串
{"a"=>2, "d"=>5, "f"=>1, "g"=>1, "h"=>1, "i"=>1, "z"=>2}
在Ruby中,你如何通過哈希迭代顯示a2d5f1g1h1i1z2
無需迭代。 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)
>> {"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}.flatten.join
=> "a2d5f1g1h1i1z2"
> {"a"=>2, "d"=>5, "f"=>1, "g"=>1, "h"=>1, "i"=>1, "z"=>2}.inject('') {|s,v| s << "#{v.join}"}
=> "a2d5f1g1h1i1z2"
注意,哈希順序沒有Ruby版本保證早於1.9 – 2011-04-05 05:17:57