ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript でさまざまな長さの配列からデカルト積を効率的に生成するにはどうすればよいですか?

JavaScript でさまざまな長さの配列からデカルト積を効率的に生成するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-30 01:52:10
オリジナル
771 人が閲覧しました

How to Efficiently Generate Cartesian Products from Arrays of Varying Lengths in JavaScript?

JavaScript での可変配列のデカルト積生成

さまざまな長さの配列のセットから取得した要素の可能なすべての組み合わせを生成するために、JavaScript プログラマーは独特の課題に直面しています。動的な配列数を処理するソリューションのカスタマイズは難しい場合があります。

シンプルで効率的なアプローチは、以下に示すような再帰ヘルパー関数を使用することです。

function cartesian(...args) {
  var r = [], max = args.length - 1;
  function helper(arr, i) {
    for (var j = 0, l = args[i].length; j < l; j++) {
      var a = arr.slice(0); // clone arr
      a.push(args[i][j]);
      if (i == max) r.push(a);
      else helper(a, i + 1);
    }
  }
  helper([], 0);
  return r;
}
ログイン後にコピー

これを利用するには関数の場合は、配列を引数として渡すだけです:

cartesian([0, 1], [0, 1, 2, 3], [0, 1, 2]);
ログイン後にコピー

出力には、提供された要素の可能なすべての組み合わせが含まれます。 arrays:

[
  [0, 0, 0],
  [0, 0, 1],
  [0, 0, 2],
  [0, 1, 0],
  [0, 1, 1],
  [0, 1, 2],
  [0, 2, 0],
  [0, 2, 1],
  [0, 2, 2],
]
ログイン後にコピー

配列の配列の場合、残りのパラメーターを使用する代わりに関数のシグネチャを function cartesian(args) に調整します。このアプローチにより、要素数が異なる任意の数の配列を処理できるようになり、この組み合わせ問題に対する柔軟なソリューションが提供されます。

以上がJavaScript でさまざまな長さの配列からデカルト積を効率的に生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート