2014-10-30 81 views
1

简单的例子,但我想了解它是如何完成的,所以我可以应用它,其中我有一个主阵列与6个元素。我想从主数组中取3个元素并将其放入一个数组中,然后从主数组中取出其他3个元素并将它们放入b数组中。我会用这个把它应用到发牌到两名球员将数组的内容拆分为两个其他数组

main = [1, 2, 3, 4, 5, 6] 
    a = [ ] 
    b = [ ] 
+3

'一个主= [0,3] => [1,2,3]; b = main [3,3] => [4,5,6]'。 – 2014-10-30 01:14:56

+2

''main = [1,2,3,4,5,6];'' ''a,b = main.each_slice(3).to_a'' – rejin 2014-10-30 05:47:06

+0

我已根据您的要求发布答案。 ;) – 2014-10-30 10:49:04

回答

4
main = [1, 2, 3, 4, 5, 6] 
#=> [1, 2, 3, 4, 5, 6] 
main.first(3) 
#=> [1, 2, 3] 
main.last(3) 
#=> [4, 5, 6] 
1
a = [1, 2, 3, 4, 5, 6] 
#=> [1, 2, 3, 4, 5, 6] 
b = a.take(3) 
#=> [1, 2, 3] 
c = a.drop(3) 
#=> [4, 5, 6] 
0

你有很多方法可以做同样的事情在Ruby中。分裂数组并不是一个例外。许多答案(和评论)告诉你一些方法来做到这一点。如果你的程序正在处理卡片,你不会停在那里。首先,你可能会有超过6张牌。其次,你可能会有超过2名球员。假设卡牌是C,玩家是P.您需要编写一个方法,无论有多少Cs或Ps,该方法都会为每个玩家提供相同数量的卡片(如果卡片数量相同不能给它相同数量的卡片)。所以对于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表达式,该表达式还返回最后执行的表达式的值(即each_slice所在的行)。让我们来尝试一下:

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! 

关于Ruby的好处是它的简单的语法,并试图让你的出路,而解决问题的,因此您可以更专注于比代码中的实际问题的事实。

1

所有可能给正确的答案,但正如我从你的问题(I will use this to apply it to dealing cards to two players)明白当你发牌,因为你处理卡选手main阵列应该从自我数组删除元素克服冗余问题 (复制)。当您处理所有卡时main数组必须为空。

对于这种溶液看看Array#shift

> main = [1,2,3,4,5,6] # I have 6 cards on my hand before dealing cards to players 
=> [1, 2, 3, 4, 5, 6] 
> a = main.shift(3) # given 3 cards to Player a 
=> [1, 2, 3] 
> b = main.shift(3) # given 3 cards to Player b 
=> [4, 5, 6] 
> main # after dealing all cards to two players I should not have any card on my hand 
=> [] 
相关问题