2012-10-14 47 views
3

我有一個簡單的每個語句返回數組作爲2個元件的陣列,而不是4紅寶石

game.each{|match| winner += rps_game_winner(match) 

勝利者被預先定義爲winner = []

rps_game_winner將返回2個元件的陣列的陣列上。 我想贏家是一個數組和2個元素的數組。 而不是如果遊戲有2場比賽我會得到4個元素的數組。

有沒有辦法將4個元素的數組快速轉換爲2個數組的2個元素的數組。 或者讓優勝者首先獲得2個元素的陣列

例如,獲勝者應該等於[[「rob」,「Hi」],[「sally」,「no」]]而不是[「rob」 ,「Hi」,「sally」,「no」]

回答

3

請勿使用+=;使用<<

game.each{|match| winner << rps_game_winner(match)} 

雖然+結合兩個陣列爲一體,<<增加了新的要素。如果一個新的元素恰好本身是另一個數組,它仍然添加的元素,而不是合併

如果你喜歡的話標點,你也可以拼一下push

game.each do |match| winner.push(rps_game_winner match) end 
+0

正是我一直在尋找。謝謝:) – Xitcod13

2

使用each_cons,這意味着每個連續元素:

game.each_cons(2){|match1,match2| 
    winner << [rps_game_winner(match1), rps_game_winner(match2)] 
} 

* NB:利用each_cons的工作正常,如果rps_game_winner將返回一個平坦元件,不是數組與兩個元件

1

你想要#each_slice。這將返回您可以遍歷可枚舉的方法,但要求它#to_a將其轉換成你想要的數組:

["rob","Hi","sally","no"].each_slice(2).to_a # => [["rob", "Hi"], ["sally", "no"]] 
+0

謝謝你可能會在不久的將來派上用場:) – Xitcod13