最近、同様の質問を書きましたが、質問自体が明確ではなく、十分に説明的でなかったため、削除しました。だからここに行きます:
さまざまなパターンに基づいて、配列内の項目のリストを再配置しようとしています。たとえば、次のような配列があるとします。
var Items = ['l','w','m','m','w','h','l','w','m','m','w','h','l','w','h'];
ここで、アイテムを再配置して、これらのパターンのいずれかをマッピングしたいと思います。
var Patterns = ['l', 'ww', 'hh' , 'wmm', 'mmw', 'hmm', 'mmh', 'mmmm'];
アイテムをランダムに選びたくないので、左から右に読んで、アイテムの時系列の階層をできるだけ近づけたいと思います。また、パターン配列は左から右へ優先的に読みます。(「l」は「ww」などよりも重要です。)
プロセスを順を追って説明します。
上記の Items 配列を使用する場合、最初の項目 Items[0] を確認し、それを Patterns 配列と比較します。
そう:
ステップ 1. Items[0] (l) は Patterns[0] ( l ) に完全に一致するため、パターンの組み合わせをさらに検索するのをやめ、これを保存して、ここから続行します。
Output: l, …
ステップ 2. Items[1] (w) は Patterns[1] ( w w) および Patterns[3] ( w mm) に一致します。'w' で始まるか、または 'w' を含むすべてのパターンの組み合わせは別の文字と組み合わされるため、検索を続けます。
ステップ 3 (ステップ 2 からの続き) . Items[1] (w) + Items[2] (m) は Patterns[3] ( wm m) に一致します。Patterns[3] には 3 文字 (wmm) が含まれているため、続行します。
ステップ 4 (ステップ 3 の続き) . Items[1] (w) + Items[2] (m) + Items[3] (m) は Patterns[3] ( wmm ) に一致します。完全に一致するため、閉じて保存します。
Output: l, w, m, m, …
ステップ 5. Items[4] (w) は Patterns[1] ( w w) および Patterns[3] ( w mm) に一致します。「w」で始まるか、「w」を含むすべてのパターンの組み合わせは別の文字と組み合わされるため、検索を続けます。
ステップ 6. (ステップ 5 からの続き) . Items[5] (h) は 'w' で始まるパターンの組み合わせに一致しないため (前のステップ)、最も近い 'w' (この場合は Items[7]) を取得して移動し、Items[4] と結合します (前のステップ)。ステップ) これは Patterns[1] ( ww )の一致であるため、配列を左から右に読み取るため、Patterns[1] は Patterns[3] よりも重要 (優先順位付け) です。
Output: l, w, m, m, w, w, …
継続する...
Items 配列の最後の文字または 2 つの文字を結合することは不可能かもしれませんが、確かではありません。すべての組み合わせをステップ実行した後の上記の Items 配列の完全な出力 (私のカウントが正しい場合) は次のとおりです。
Output: l, w, m, m, w, w, h, h, l, m, m, w, l, w, h
Javascriptを使用してこれを行う方法を知っている人はいますか?