2014-10-30 99 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 
=> [] 
相關問題