Перебирать хеш, возвращать все значения в одной строке в виде строки - PullRequest
0 голосов
/ 05 апреля 2011

У меня есть следующий хэш:

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

В ruby, как вы перебираете хеш для отображения a2d5f1g1h1i1z2

Ответы [ 3 ]

2 голосов
/ 05 апреля 2011

Вот пара:

> {"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"
2 голосов
/ 05 апреля 2011

Нет необходимости повторять. 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 голос
/ 05 апреля 2011
>> {"a"=>2, "d"=>5, "f"=>1, "g"=>1, "h"=>1, "i"=>1, "z"=>2}.flatten.join
=> "a2d5f1g1h1i1z2"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...