У вас есть много способов сделать то же самое в Ruby. Разделение массивов не является исключением. Многие ответы (и комментарии) рассказали вам о некоторых способах этого. Если ваша программа работает с картами, вы не остановитесь там. Во-первых, у вас, вероятно, будет более 6 карт. Во-вторых, у вас, вероятно, будет более двух игроков. Скажем, карты C, а игроки - P. Вам нужно написать метод, который, независимо от того, сколько Cs или Ps существует, метод даст каждому игроку равное количество Ccards (или возвращает ошибку, если это не может дать ему равное количество карт). Так что для 6 карт и 2 игроков он будет давать по 3 карты каждый. Для 12 карт и 3 игроков - по 4 карты. Для 3-х карт и 2 игроков, это будет выдавать ошибку, потому что карты не могут быть равномерно распределены:
def split_cards_evenly_between_players(cards, players)
if cards.size % players != 0
raise 'Cannot split evenly!'
else
groups_to_split_into = cards.size/players
cards.each_slice(groups_to_split_into).to_a
end
end
Давайте пройдемся по коду. Если карты не могут быть равномерно распределены между игроками, то остаток, деля их, не будет 0 (6 карт/3 игрока = остаток 0. 7 карт/3 игрока = остаток 1). Вот что проверяет строка 2. Если карты могут быть разделены, тогда мы сначала обнаруживаем, что группы разбиваются на (которые делят количество карт на количество игроков). Затем мы просто разделили массив на множество групп с Enumerable#each_slice. Наконец, поскольку это не создает массив, нам нужно .to_a его преобразовать. Возвращаемое значение в Ruby всегда является значением последнего выполненного выражения. Единственным выражением в этом методе является выражение if/then, которое также возвращает значение последнего выполняемого выражения (которое является строкой, где каждая из них является). Давайте попробуем это:
p split_cards_evenly_between_players([1,2,3,4,5,6,7,8,9,10,11,12],2) #=> [[1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12]]
p split_cards_evenly_between_players([4,5,1,2,5,3], 3) #=> [[4, 5], [1, 2], [5, 3]]
p split_cards_evenly_between_players([1,2,3],2) #=> Error: Cannot split evenly!
Хорошая вещь о Руби является его простой синтаксис и тот факт, что пытается выйти из своего пути, решая проблему, так что вы можете сосредоточиться на актуальной проблеме, чем код.
'а = основная [0,3] => [1, 2, 3]; b = main [3,3] => [4, 5, 6] '. –
'' main = [1, 2, 3, 4, 5, 6]; '' '' a, b = main.each_slice (3) .to_a'' – rejin
Я отправил ответ в соответствии с вашим требованием. ;) –