1. ホーム
  2. javascript

[解決済み] Javascript- Lodash シャッフル vs. Math.Random()

2022-02-14 10:09:11

質問

Javascriptで簡単なBlackJackゲームをコーディングしている最中です。 今のところ、このような配列を持っています。

var deckArray = [ "card1", "card2",...,"card52" ]

私は、"deal"関数をこのように設定しています。

var deal = function(){
   var card = Math.floor(Math.random() * deckArray.length);
   return deckArray.splice(card,1)[0];
};

すでにMath.randomを使ってdeckArrayからランダムに選択しているので、このようにLodashで"shuffle"関数を組み込むのは冗長でしょうか。

var shuffle = function(){
  deckArray = _.shuffle(deckNames);
};

解決方法は?

そうだろうと思います。実際のカードでは、デッキをシャッフルしてから、デッキの一番上から何枚かカードを選びます。これはおそらくシャッフル機能で行うことで、実際の使い方をモデル化しているのでしょう。

Math.Random() シャッフルされていないデッキからランダムにカードを選ぶことになります。ここで重要なのはランダム性です(これは 本当に ということです。) つまり、これは実際の使い方をモデルにしているわけではありませんが、最終的な結果は同じなのです。

私が提案するのは Math.Random() を使用するよりも高速になるためです。 _.shuffle の(Fisher-Yates)アルゴリズムと同じです。