我是 Ruby 的半新手 :*(,所以提前谢谢你。我正在尽可能多地学习,我已经搜索了几个小时,但似乎无法在任何地方找到答案。
我在 Deck 类中编写了这个方法。
def shuffle!
@cards.shuffle!
end
我想知道,使用这种方法,我是否可以修改它以将卡片数组洗牌7次,而不是现在只洗牌一次。如果没有,我是否必须编写另一个调用 .shuffle 的方法!并在我初始化一个新甲板后运行七次。再次感谢任何可以提供帮助的人:)
我是 Ruby 的半新手 :*(,所以提前谢谢你。我正在尽可能多地学习,我已经搜索了几个小时,但似乎无法在任何地方找到答案。
我在 Deck 类中编写了这个方法。
def shuffle!
@cards.shuffle!
end
我想知道,使用这种方法,我是否可以修改它以将卡片数组洗牌7次,而不是现在只洗牌一次。如果没有,我是否必须编写另一个调用 .shuffle 的方法!并在我初始化一个新甲板后运行七次。再次感谢任何可以提供帮助的人:)
您可以使用以下技巧,因为Array#shuffle没有这样的功能,只有n 次。文档说如果给出了 rng,它将被用作随机数生成器。
def shuffle!(n=7)
n.times { @cards.shuffle! }
end
如果你调用它,a.shuffle
只会对数组进行一次改组a
。如果你调用 as a.shuffle(random: Random.new(4))
,那么改组时间在数组上是随机的a
。
你可能想按照这些思路做一些事情。
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 次,我认为你不需要传递参数 - 试试这个:
def shuffle
7.times {self.shuffle!}
end
并且在initialize
def initialize
#your code here
@cards.shuffle
end