Итак, скажем, у меня есть массив, который выглядит следующим образом:
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
и массивов hella complex.
Как мне получить то, что я ищу?
Редактировать 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
- это означает, что yield передает значение в блок, и это передается моему методу rps_game_winner
, и он что-то оценивает и выдает эту ошибку - для метода.Но он не оценивает его должным образом .... потому что он должен смотреть на Armando
и Dave
и возвращать победителя, затем он должен вернуться и продолжить поиск следующей пары и вернуть победителя и т. Д.
Есть идеи, почему это не работает?