洗牌!一个数组n次在ruby中

时间:2013-10-19 10:08:30

标签: ruby-on-rails ruby shuffle playing-cards

我是Ruby的半新手:*(所以,提前谢谢你。我尽可能多地学习,我已经搜索了几个小时,但似乎无法在任何地方找到答案。

我在Deck课程中写过这个方法。

def shuffle!
  @cards.shuffle!
end

我想知道,如果使用这种方法,我可以修改它以将卡阵列 7 次洗牌,而不是仅仅一次,这是它现在所做的。如果没有,我是否必须编写另一个调用.shuffle的方法!一旦我初始化一个新的甲板,就运行七次。再次感谢任何可以提供帮助的人:)

3 个答案:

答案 0 :(得分:3)

你可以使用下面的一些技巧,因为Array#shuffle没有这样的功能,只有 n次。该文档说如果给出了rng,它将被用作随机数生成器。

def shuffle!(n=7)
  n.times { @cards.shuffle! }
end

如果你称之为a.shuffle,则只会对数组a进行一次改组。如果您调用a.shuffle(random: Random.new(4)),那么数据{{1}上的随机播放时间是随机的}。

答案 1 :(得分:1)

你可能想要沿着这些方向做点什么。

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的值。

答案 2 :(得分:0)

如果你总是要将牌组洗牌7次,我认为你不需要传递论据 - 试试这个:

def shuffle
  7.times {self.shuffle!}
end

并在initialize

def initialize
  #your code here
  @cards.shuffle
end