2012-09-02 13 views
6

なぜこのコードはルビをロックアップするのですか?そして、それを越える最善の方法は何ですか?私は下に自分のソリューションを掲載しました。これを行う別の方法がありますか?前もって感謝します!反復中に配列に追加する

コード:

nums = [1, 2, 3] 
nums.each { |i| nums << i + 1 } 

私のソリューション:

nums = [1, 2, 3] 
adjustments = [] 
nums.each { |i| adjustments << i + 1 } 
nums += adjustments 

答えて

8

各列挙子を使用しているためだ(あなたがそれに追加し続けるのであれば、それは最後に到達することはありません)。

それぞれを適用する前にアレイを複製できます。

nums = [1, 2, 3] 
nums.dup.each { |i| nums << i + 1 } 

もう一つの方法は、マップによって与えられた余分な要素を追加することです:

nums = [1, 2, 3] 
nums += nums.map { |i| i + 1 } 
+0

+1うわー。それは今完全に意味があります!ありがとう! – Dru

4
nums = [1, 2, 3] 
nums.each { |i| nums << i + 1 } 

あなたはそれを反復しているとしてアレイに追加するので、それが終了することはありません実行されています。

+0

+1ありがとうございます!私は今までに接続していませんでした。 – Dru