GASで実現!重複なしのランダム配列を作成する方法と活用例

上司から「GASで重複なしのランダム配列を作る方法を調べてくれないか」と頼まれてしまった…!
猫男
猫男
catman
catman
ふっ、くそ困っているようだな。GASを駆使すればランダムな配列も簡単に作れるから安心するんだ。

GASでランダム配列を作る方法

まずは基本からいこう。

GASを使ってランダム化する基本方法

まずはリストからランダムに要素を選び、ランダム抽出する方法を学ぶのが基本だ。


function generateRandomArray() {
  const list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
  const shuffled = list.sort(() => 0.5 - Math.random());

  return shuffled.slice(0, 5); // ランダム抽出で5つを取得
}

Logger.log(generateRandomArray());

リストを用意し、それをランダムに並び替えている。そして、.slice()で先頭の5つを取得している。

ほんとだ!単純な方法だけど、ランダム化できるんだね。もう少し進んだことも知りたいな。
猫男
猫男

重複なしのランダム配列の作成

リスト内の要素を重複なしで選びたい場合には、Set を利用するといい。


function generateUniqueRandomArray() {
  const list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
  const result = new Set();

  while (result.size < 5) {
    const randomIndex = Math.floor(Math.random() * list.length);
    result.add(list[randomIndex]);
  }

  return Array.from(result);
}

Logger.log(generateUniqueRandomArray());

Setはユニークな要素のみを保持するデータ構造さ。これを使って重複なしで要素を選び出している。

GASでランダム配列を活用したプロジェクト例

次は応用だな。

GASでランダム文字列を生成

例えばプロジェクトにおいて、ユーザー名やIDをランダム文字列で生成することも可能だ。


function generateRandomString(length) {
  const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  let result = '';
  for (let i = 0; i < length; i++) {
    result += characters.charAt(Math.floor(Math.random() * characters.length));
  }
  return result;
}

Logger.log(generateRandomString(8)); // 例: 'A1b2C3d4'

ここでは、ランダムな文字を指定された回数分組み合わせている。

ランダム範囲の設定

特定の範囲からランダムに配列を作成する場面も多い。以下のスクリプトはその場合の基礎となる。


function getRandomNumbersInRange(min, max, count) {
  const range = max - min + 1;
  const numbers = [];
  while (numbers.length < count) {
    const randomNum = Math.floor(Math.random() * range) + min;
    if (!numbers.includes(randomNum)) {
      numbers.push(randomNum);
    }
  }
  return numbers;
}

Logger.log(getRandomNumbersInRange(1, 50, 5));

これは指定された範囲内からランダムで重複しない数字を取得する。

これでランダム配列の使い方もバッチリ理解できたよ!catmanに感謝!
猫男
猫男

練習問題

以下の条件でランダムな配列を作成するスクリプトを書いてみてください。

  • 文字列のリスト [“apple”, “banana”, “cherry”, “date”, “elderberry”] から重複なしでランダムに3つ選ぶ。

 

 

解答・解説


function selectRandomFruits() {
  const fruits = ["apple", "banana", "cherry", "date", "elderberry"];
  const selected = new Set();

  while (selected.size < 3) {
    const randomIndex = Math.floor(Math.random() * fruits.length);
    selected.add(fruits[randomIndex]);
  }

  return Array.from(selected);
}

Logger.log(selectRandomFruits());

ここでは、新しいSetを使い、重複なしでランダム抽出している。ランダムに選んだインデックスを使ってリストから要素を取得し、Setに追加しているので、重複が自動的に排除される仕組みだ。