2012-05-13 13 views
4

私は配列とハッシュを持って追加はn個の要素

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

そして私は回数n個の要素を取得するためのキーを反復が発生し、アレイのn倍にその要素を追加します

結果

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

注入(または私は、多くの場合、Rubyコードで参照する他の方法)でこれを書くための良い方法は何ですか?デビッドの答え@

+0

ただ、サイドノート:一般的に、しかし、あなたは、のうちの1つを介して既存のアレイに oをのn回オブジェクトを追加することができハッシュはRuby 1.9の前に挿入順序を保持(とではありません一般的に、ハッシュテーブルは順序付けられていないデータ構造です)、これは最初の目的のための正しいデータ構造ではないかもしれません:) –

+2

要素はソート可能なオブジェクトなので、後でソートすることができます私は注文が必要です。 – MxyL

+0

十分に公正で、私はちょうどそれを指摘したかった:) –

答えて

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

Aah、 'flat_map'、あなたが*できないものは何ですか? –

+1

前に 'flat_map'を見たことがありません。 –

+0

@JörgWMittag:それはまだあなたをピナ・コラダにすることはできません。私はMatzがそれに取り組んでいると思う。 –

2

は、あなたのニーズに合わせてスポットオンです。

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

# …alternatively create a new modified array 
new_array = my_array + [o]*n 
関連する問題