我正在制作一款卡牌游戏,在游戏开始前需要洗牌玩家的牌库。将数组洗牌后插入数据库即可轻松完成此操作。然而,在游戏开始后,有些情况下需要玩家重新洗牌。我想到的唯一方法是再次洗牌后重新插入牌库,但这显然是低效的。以下是插入前洗牌的代码:
deck = _.shuffle (Card_Reference.find deck_id: hoster.deck).fetch()
_.each deck, (card) ->
Deck.insert
userId: opponent._id
game_id: id
card: card.card
插入后
deck = Deck.find().fetch()
ids = _.pluck deck, "_id"
shuffled = _.shuffle deck
Deck.remove {_id: $in: ids}
_.each shuffled, (card) ->
Deck.insert
userId: opponent._id
game_id: id
card: card.card
当然,这是无效和不必要的。那么,如何打乱集合呢?谢谢。