スキルアップを始める!

【GAS】配列の要素をランダムに並び替える(シャッフルする)JavaScript

GAS(GoogleAppsScript)
この記事は約5分で読めます。
\ワードプレスのスキルアップはこちら!/ WordPress入門読本

配列の要素をランダムに並び替え(シャッフル)します。

ランダムに並び替え(シャッフル)コード

// Function to shuffle an array
function shuffleArray(array) {
  for (var i = array.length - 1; i > 0; i--) {
    var j = Math.floor(Math.random() * (i + 1));
    var temp = array[i];
    array[i] = array[j];
    array[j] = temp;
  }
  return array;
}
  • 配列の長さを取得し、最後の要素から開始して配列の先頭に向かって反復処理を行います(forループを使用)。
  • 各反復で、現在の位置(i)とは異なるランダムな位置(j)を選択します。このランダムな位置は、0からiまでの間の整数で、Math.floor(Math.random() * (i + 1))を使って決定されます。
  • 選択した2つの要素の位置を交換します。
  • これには、一時的な変数(temp)を使用して、現在の要素(array[i])を一時的に保存し、array[i]の位置にランダムに選ばれた要素(array[j])を設置し、最後にarray[j]の位置に一時的に保存された要素(temp)を設置します。

このプロセスを配列の全要素に対して行った後、シャッフルされた配列が完成し、返されます。

Logger.log()メソッドを使用して各ステップでの配列の状態をログ出力する

Logger.log()メソッドを使用して、各ステップでの配列の状態を記録します。以下に、シャッフル処理を行いながら、各ステップの情報をログに出力するよう改修した関数の例を示します。

// Function to shuffle an array with logging
function shuffleArrayWithLogging(array) {
  for (var i = array.length - 1; i > 0; i--) {
    var j = Math.floor(Math.random() * (i + 1));
    var temp = array[i];
    array[i] = array[j];
    array[j] = temp;
    // Log the current step and state of the array
    Logger.log('Step: i=' + i + ', j=' + j + ', array=[' + array.join(', ') + ']');
  }
  return array;
}

// Example of using the function
function testShuffle() {
  var sampleArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
  Logger.log('Before shuffle: [' + sampleArray.join(', ') + ']');
  var shuffledArray = shuffleArrayWithLogging(sampleArray);
  Logger.log('After shuffle: [' + shuffledArray.join(', ') + ']');
}

このコードでは、shuffleArrayWithLogging関数が配列の要素をシャッフルします。

このコードは、シャッフルプロセスの開始前、各交換操作後、そして最終的なシャッフルされた配列の状態をログに記録します。testShuffle関数を実行することで、シャッフルの各ステップを確認することができます。

Before shuffle: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Step: i=9, j=1, array=[1, 10, 3, 4, 5, 6, 7, 8, 9, 2]
Step: i=8, j=3, array=[1, 10, 3, 9, 5, 6, 7, 8, 4, 2]
Step: i=7, j=0, array=[8, 10, 3, 9, 5, 6, 7, 1, 4, 2]
Step: i=6, j=0, array=[7, 10, 3, 9, 5, 6, 8, 1, 4, 2]
Step: i=5, j=4, array=[7, 10, 3, 9, 6, 5, 8, 1, 4, 2]
Step: i=4, j=4, array=[7, 10, 3, 9, 6, 5, 8, 1, 4, 2]
Step: i=3, j=2, array=[7, 10, 9, 3, 6, 5, 8, 1, 4, 2]
Step: i=2, j=1, array=[7, 9, 10, 3, 6, 5, 8, 1, 4, 2]
Step: i=1, j=0, array=[9, 7, 10, 3, 6, 5, 8, 1, 4, 2]
After shuffle: [9, 7, 10, 3, 6, 5, 8, 1, 4, 2]

まとめ

この関数は配列内の要素の順序をランダムに並び替えるために使用されます。

これは、ゲームでのカードのシャッフルや、データセットをランダム化する際など、さまざまなシナリオで有用です。

URLをコピーしました!