我是Ruby的一個半新手:*(,所以提前感謝你,我儘可能多的學習,我已經搜索了幾個小時,但似乎無法找到答案任何地方。洗牌!在ruby中n次數組
我已經在甲板類寫了這個方法。
def shuffle!
@cards.shuffle!
end
我想知道,使用這種方法,我可以修改它來洗牌陣列倍,而不是隻有一次,如果沒有的話,是否需要編寫另一個調用.shuffle的方法,並在初始化一個新的Deck後運行這七次,再次感謝任何能夠幫助的人:)
我是Ruby的一個半新手:*(,所以提前感謝你,我儘可能多的學習,我已經搜索了幾個小時,但似乎無法找到答案任何地方。洗牌!在ruby中n次數組
我已經在甲板類寫了這個方法。
def shuffle!
@cards.shuffle!
end
我想知道,使用這種方法,我可以修改它來洗牌陣列倍,而不是隻有一次,如果沒有的話,是否需要編寫另一個調用.shuffle的方法,並在初始化一個新的Deck後運行這七次,再次感謝任何能夠幫助的人:)
您可以使用下面的一些技巧,因爲Array#shuffle沒有這樣的功能,只有n次。該文檔是說如果給出rng,它將用作隨機數生成器。
def shuffle!(n=7)
n.times { @cards.shuffle! }
end
如果你把它a.shuffle
只有一次洗牌將在陣列a
上完成。如果你打電話爲a.shuffle(random: Random.new(4))
,然後洗牌時間是在陣列a
隨機的。
如果你改變了簽名以def shuffle!(n = 7),那麼功能將更加緊密地滿足要求,並且可以使用洗牌!方法而沒有指定洗牌的次數。 – Arkhitech
@Arkhitech好的建議..我確實改變了.. –
如果你總是要洗牌7倍,我覺得你並不需要傳遞一個參數 - 試試這個:
def shuffle
7.times {self.shuffle!}
end
和initialize
def initialize
#your code here
@cards.shuffle
end
你'd可能想根據這些方面做些事情。
class Deck
def initialize(cards)
@cards = cards
end
def shuffle!(n = 7)
n.times { @cards.shuffle! }
@cards
end
end
cards = [1, 2, 3, 4]
Deck.new(cards).shuffle! # => [3, 4, 1, 2]
請注意,該方法將返回@cards的值。
只是一個問題,你爲什麼要這樣做7次? – hirolau
有一個理論,洗牌7次創建最佳的隨機化。我曾向一位數學家朋友詢問過這個問題,他說:「我描述過的混洗算法(完美地切割揹包,然後完美地進行網格劃分)具有所謂的」迭代「算法的特點,因爲它需要輸出最後一輪作爲本輪的輸入,因此可能是混亂的,穩定期與混亂期(即高度複雜)行爲交替.7次洗牌可能是一個邊界點。我認爲7次洗牌可能沒有什麼特別之處雖然......「 – dax
好的,但是這是人類通過特定方式創造」隨機性「的一副真正的撲克牌。多做一次是完全可以理解的。洗牌! - 紅寶石方法不會這樣工作,並且不會從多次洗牌中受益。 – hirolau