Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何从具有元素和频率的散列创建数组_Ruby - Fatal编程技术网

Ruby 如何从具有元素和频率的散列创建数组

Ruby 如何从具有元素和频率的散列创建数组,ruby,Ruby,我有一个散列,其中每个键对应于它的频率: hsh = {'a' => 2, 'b' => 3, 'c' => 1} 我想将其分解为一个数组: arr = ['a', 'a', 'b', 'b', 'b', 'c'] 我使用了下面的方法,效果很好,但是有更好的方法吗 arr = [] hsh.each do |x,y| y.times do arr << x end end arr=[] hsh.每个do | x,y| y、 时代确实如此 arr

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

hsh = {'a' => 2, 'b' => 3, 'c' => 1}
我想将其分解为一个数组:

arr = ['a', 'a', 'b', 'b', 'b', 'c']
我使用了下面的方法,效果很好,但是有更好的方法吗

arr = []
hsh.each do |x,y|
  y.times do
    arr << x
  end
end
arr=[]
hsh.每个do | x,y|
y、 时代确实如此

arr你的方法看起来不错,但你也可以这样写

hash.flat_map { |k,v| v.times.map { k } }

你的方法看起来不错,但你也可以这样写

hash.flat_map { |k,v| v.times.map { k } }

您可以执行一行程序,如:

hsh.map { |k,v| Array.new(v,k) }.flatten
map作为每个
进行迭代,并返回一个包含每个迭代结果的数组。对于每个条目,创建一个新数组,其中包含默认值为
k
v
元素。由于
map
的结果将是一个数组,因此需要将其展平

hsh.每个带有对象([])的对象都是do |(k,v),arr |

v、 times{arr你可以做一行,比如:

hsh.map { |k,v| Array.new(v,k) }.flatten
map作为
each
进行迭代,并返回一个包含每次迭代结果的数组。对于每个条目,您将使用默认值
k
v
元素创建一个新数组。由于
map
的结果将是一个数组,您需要将其展平

hsh.每个带有对象([])的对象都是do |(k,v),arr |

v、 时间{arr,这就是它的全部。不确定是否有更好/更简单的方法:)或
hsh.flat_-map{k,v | k*v}
这就是它的全部。不确定是否有更好/更简单的方法:)或
hsh.flat_-map{k,v | k*v}如果代码工作,你想要更好的方法,你应该考虑使用而不是。如果代码工作,并且你想要一个更好的方法,你应该考虑使用而不是。