所以,說我有一個數組,看起來像這樣:獲取收益率對數組的嵌套數組工作 - 紅寶石
t = [
[
[["Armando", "P"],["Dave", "S"]],
[["Richard", "R"],["Michael", "S"]],
],
[
[["Allen", "S"],["Omer", "P"]],
[["David E.", "R"], ["Richard X.", "P"]]
]
]
基本上,我想,以評估有兩個元素的數組每個內部陣列 - 例如上面的代碼片段中的第一個是Armando, and Dave
。這兩個元素都是一個數組中的兩個元素,這是父數組中的第一個元素。
我想要做的是取第一個「子數組」,並將其分配給一個變量。將該變量傳遞給我擁有的另一個方法(例如my_method
),該方法將僅返回子數組中的其中一個元素。
我想我想使用yield
但我不太確定如何做到這一點。
我的想法是這樣的:
t.each do |entry|
a = entry
yield my_method(a)
end
但我正在逐漸與yield
的手斷和海拉複雜的陣列混淆。
我如何得到我在找的東西?
編輯1:這就是我正在做的與t
,但我仍然收到一個錯誤,表明我做了錯誤的產量等。
這是我將要評估t
主要方法:
def rps_game_winner(game)
raise WrongNumberOfPlayersError unless game.length == 2
if (game[0][1] =~ /[r]/i && game[1][1] =~ /[s]/i) || (game[0][1] =~ /[s]/i && game[1][1] =~ /[p]/i) || (game[0][1] =~ /[p]/i && game[1][1] =~ /[r]/i)
return game[0]
elsif (game[0][1] =~ /[r]/i && game[1][1] =~ /[p]/i) || (game[0][1] =~ /[s]/i && game[1][1] =~ /[r]/i) || (game[0][1] =~ /[p]/i && game[1][1] =~ /[s]/i)
return game[1]
elsif game[0][1] == game[1][1]
return game[0]
else
raise NoSuchStrategyError.new
end
end
def rps_tournament_winner(t)
t.each do |pair|
yield pair
end
end
rps_tournament_winner(t) { |x| rps_game_winner(x) }
所以我得到的錯誤是:NoSuchStrategyError: NoSuchStrategyError
- 這意味着產量傳遞一個值的塊和被傳遞到我的方法rps_game_winner
,它正在評估一些東西並給出這個錯誤 - 按照這個方法。但它沒有正確評估它......因爲它應該看着Armando
和Dave
並返回一個贏家,那麼它應該返回並繼續查看下一對並返回贏家等。
任何想法這不起作用?
人力資源管理模式......在我的情況下,發生的事情是,我有一個方法說'print_full_names (name)',其中'name'是一個這樣的數組:'[first,last]'。因此,我不需要傳入兩個變量,或者甚至是像'print_first_names'方法那樣的數組中的兩個元素,我需要做的是能夠傳入整個數組,然後讓該方法作用於array [0] '和'數組[1]'......如果這是有道理的話。 – marcamillion 2012-03-13 09:19:43
我用更多的代碼和我得到的錯誤更新了這個問題。有什麼想法嗎? – marcamillion 2012-03-13 21:19:33
你得到了錯誤,因爲你在屈服於錯誤的級別的對象;另一個「每個」等級使錯誤消失。不是100%我有你想要的答案,但它運行良好。 – 2012-03-14 01:46:24