1

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

我在 Deck 类中编写了这个方法。

def shuffle!
  @cards.shuffle!
end

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

4

3 回答 3

3

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

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

如果你调用它,a.shuffle只会对数组进行一次改组a。如果你调用 as a.shuffle(random: Random.new(4)),那么改组时间在数组上是随机的a

于 2013-10-19T10:10:21.280 回答
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 的值。

于 2013-10-19T14:31:37.107 回答
0

如果你总是要洗牌 7 次,我认为你不需要传递参数 - 试试这个:

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

并且在initialize

def initialize
  #your code here
  @cards.shuffle
end
于 2013-10-19T10:14:58.980 回答