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}如果代码工作,你想要更好的方法,你应该考虑使用而不是。如果代码工作,并且你想要一个更好的方法,你应该考虑使用而不是。