JavaScript を使用して配列内の値のインデックスをランダム化し、ランダムな配列を作成する方法の詳細な例
この記事の例では、JavaScriptを使用して配列内の値のインデックスをランダム化し、ランダムな配列を作成する方法を説明します。皆さんの参考に共有してください。詳細は次のとおりです。
今日、QW コミュニケーション グループで、数人の学生が配列のランダム化の問題について議論しているのを見かけました。そのアルゴリズムは非常に優れており、以前に実装したあまり「美しくない」方法を思い出しました。考えてみてください。機能を実装するためだけにビジネス コードを書くのに忙しいとき、より良い実装方法があるかどうかについてあまり考えないことがあります。
この配列の問題 (配列内の値を並べ替えて新しい配列を返す) について、私の以前の実装方法は次のとおりでした:
function randArr(arr) { var ret = [], obj = {}, i = arr.length, l = i, n; while (--i >= 0) { n = Math.floor( Math.random() * l ); if (obj[n] === void 0) { ret[ret.length] = obj[n] = arr[n]; } else { i++; } } return ret; }
上記のコードは機能しますが、それは良いアルゴリズムではありません。 「元の配列の長さ」ループを実行する予定です。各ループは元の配列内のインデックスをランダムに選択し、インデックスが取得されているかどうかを判断します。取得されていない場合は、インデックスの値を新しい配列に入力します。そうであれば、デクリメントキー i が 1 だけインクリメントされます (目的は、別の未フェッチのインデックスがフェッチされるまでサイクルを繰り返すことです)。この方法のパフォーマンスはあなたの性格に依存します。このアイデアを見た学生はその理由を理解できると思います。
ここでグループ内のクラスメートのアルゴリズムを与えます:
function randArr(arr) { var ret = [], i = arr.length, n; arr = arr.slice(0); while (--i >= 0) { n = Math.floor( Math.random() * i); ret[ret.length] = arr.splice(n, 1)[0]; } return ret; }
これは、各ループの後、ランダムなインデックスが取得され、その値が配列から削除されます。このインデックスをランダムに取得すると、このインデックスは前回取得した値ではなくなり、乱数の範囲は配列の長さに応じて減少するため、一度に一定回数ループして望ましい結果を得ることができます。 。
また、改良版も見ました。これは、配列の削除操作によって引き起こされるパフォーマンスの問題を考慮し、JK のシャッフル アルゴリズムを使用しています。つまり、各削除操作を位置置換操作 (フェッチされたインデックスの値) に変更しています。は、現在のデクリメントキー i) に対応する値と交換されるため、配列全体への影響は最小限になります:
function randArr(arr) { var ret = [], i = arr.length, n; arr = arr.slice(0); while (--i >= 0) { n = Math.floor( Math.random() * i); ret[ret.length] = arr[n]; arr[n] = arr[i]; } return ret; }
最後に、「min~max の間の値を持つランダムな配列を作成します。」 " " メソッドのアルゴリズム原理は上記と同様です:
function makeRandArr(min, max) { var ret = [], obj = {}, n; for (; max >= min; max--) { n = Math.ceil( Math.random() * (max - min) ) + min; ret[ret.length] = obj[n] || n; obj[n] = obj[max] || max; } return ret; }
以上がJavaScript を使用して配列内の値のインデックスをランダム化し、ランダムな配列を作成する方法の詳細な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









顔の検出および認識テクノロジーは、すでに比較的成熟しており、広く使用されているテクノロジーです。現在、最も広く使用されているインターネット アプリケーション言語は JS ですが、Web フロントエンドでの顔検出と認識の実装には、バックエンドの顔認識と比較して利点と欠点があります。利点としては、ネットワーク インタラクションの削減とリアルタイム認識により、ユーザーの待ち時間が大幅に短縮され、ユーザー エクスペリエンスが向上することが挙げられます。欠点としては、モデル サイズによって制限されるため、精度も制限されることが挙げられます。 js を使用して Web 上に顔検出を実装するにはどうすればよいですか? Web 上で顔認識を実装するには、JavaScript、HTML、CSS、WebRTC など、関連するプログラミング言語とテクノロジに精通している必要があります。同時に、関連するコンピューター ビジョンと人工知能テクノロジーを習得する必要もあります。 Web 側の設計により、次の点に注意してください。

foreach ループを使用して PHP 配列から重複要素を削除する方法は次のとおりです。配列を走査し、要素がすでに存在し、現在の位置が最初に出現しない場合は、要素を削除します。たとえば、データベース クエリの結果に重複レコードがある場合、このメソッドを使用してそれらを削除し、重複レコードのない結果を取得できます。

PHP で配列をディープ コピーする方法には、json_decode と json_encode を使用した JSON エンコードとデコードが含まれます。 array_map と clone を使用して、キーと値のディープ コピーを作成します。シリアル化と逆シリアル化には、serialize と unserialize を使用します。

PHP の配列キー値の反転メソッドのパフォーマンスを比較すると、array_flip() 関数は、大規模な配列 (100 万要素以上) では for ループよりもパフォーマンスが良く、所要時間が短いことがわかります。キー値を手動で反転する for ループ方式は、比較的長い時間がかかります。

PHP の array_group_by 関数は、キーまたはクロージャ関数に基づいて配列内の要素をグループ化し、キーがグループ名、値がグループに属する要素の配列である連想配列を返すことができます。

PHP で配列のディープ コピーを実行するためのベスト プラクティスは、 json_decode(json_encode($arr)) を使用して配列を JSON 文字列に変換し、それから配列に戻すことです。 unserialize(serialize($arr)) を使用して配列を文字列にシリアル化し、それを新しい配列に逆シリアル化します。 RecursiveIteratorIterator を使用して、多次元配列を再帰的に走査します。

多次元配列のソートは、単一列のソートとネストされたソートに分類できます。単一列のソートでは、array_multisort() 関数を使用して列ごとにソートできますが、ネストされたソートでは、配列を走査してソートするための再帰関数が必要です。具体的な例としては、製品名による並べ替えや、売上数量や価格による化合物の並べ替えなどがあります。

PHP 配列のマージおよび重複排除アルゴリズムは、元の配列を小さなブロックに分割して並列処理する並列ソリューションを提供し、メイン プロセスは重複排除するブロックの結果をマージします。アルゴリズムのステップ: 元の配列を均等に割り当てられた小さなブロックに分割します。重複排除のために各ブロックを並行して処理します。ブロックの結果をマージし、再度重複排除します。
