2012-05-13 205 views
4

我有一个数组和散列追加n元素添加到数组

 
L = [] 
H = {3=>"a", 2=>"b", 1=>"c"} 

因此,我将遍历键得到的次数n的元件发生且该元素附加到阵列的n倍

结果

 
L = ['a', 'a', 'a', 'b', 'b', 'c'] 

什么是用注射(或其他方法,我常常在Ruby代码见)写的好办法?

+0

只是一个侧面说明:在一般情况下,但是,您可以Ø通过的一个添加对象到现有阵列ň次散列不保留之前的Ruby 1.9的插入顺序(在一般来说,哈希表是一个无序的数据结构),所以也许这不是你的目的首先正确的数据结构:) –

+2

元素是可排序的对象,所以我想我可以做一个排序然后如果我需要订单。 – MxyL

+0

够公平的,我只想指出:) –

回答

16
array = hash.flat_map { |k,v| [v]*k } 
+0

啊,'flat_map',有什么你不能*做的? –

+1

不错,以前从未见过'flat_map'。 –

+0

@JörgWMittag:它还不能让你成为Pina Colada。我认为马茨正在努力。 –

2

@David的答案是适合您的需求。

# Modify the array in-place, or… 
my_array.concat([o]*n) 

# …alternatively create a new modified array 
new_array = my_array + [o]*n