如何从具有元素和频率的哈希创建数组

Sn_*_*Srm 1 ruby

我有一个散列,其中每个键对应于它的频率:

hsh = {'a' => 2, 'b' => 3, 'c' => 1}
Run Code Online (Sandbox Code Playgroud)

我想分解成一个数组:

arr = ['a', 'a', 'b', 'b', 'b', 'c']
Run Code Online (Sandbox Code Playgroud)

我使用以下方法工作正常,但是有更好的方法吗?

arr = []
hsh.each do |x,y|
  y.times do
    arr << x
  end
end
Run Code Online (Sandbox Code Playgroud)

tok*_*and 8

arr = hsh.flat_map { |k, v| [k] * v }
#=> ["a", "a", "b", "b", "b", "c"]
Run Code Online (Sandbox Code Playgroud)

  • 或者`hsh.flat_map {|*k,v | k*v}` (2认同)