アイテムの配列の特定の配列を1つ、生成する配列の識別子を生成することを検討しています。これは決定論的(ランダムではない)でなければなりません。識別子に基づいて配列の特定の順列を生成する
たとえば、3つのアイテムの場合、6つのアレンジがあります。ユーザーがサイトを訪れるたびに、最後に見たものに基づいて選択された1つの特定のアレンジが表示されます。そこブルートフォースによって、可能性の全体のリストを生成する多くの方法がありますが、(「私は注文#1 ['a', 'b', 'c']
最後の時間を見たので、この時間は、私に['a', 'c', 'b']
あるため#2を示す」)
const items = ['a', 'b', 'c'];
const possibleArrangements = [
['a', 'b', 'c'],
['a', 'c', 'b'],
['b', 'a', 'c'],
['b', 'c', 'a'],
['c', 'a', 'b'],
['c', 'b', 'a'],
];
すべての可能な順列を生成することは、このユースケースの場合、識別子に基づいて1つの望ましい配置を得ることが本当に必要な時には過剰です。同じ項目と同じ識別子が与えられると、毎回同じ順列を生成する方法を探しています。
magicFunction(['a', 'b', 'c'], 2)
>> ['b', 'a', 'c']
提案は歓迎されるでしょう。ありがとう!
コレクションが更新されたときにあなただけの順列をキャッシュすることはできません?に答え'magicFunction()'は要求されたインデックスを取得するだけです。最後のものを得るために即座に全ての順列を生成せずに 'magicFunction(['a'、 'b'、 'c']、5)'をどのように取得するのか分かりません。 –
すべての順列のリストをハードコードすることができますが、6項目のリストでは720個のハードコードされた項目です。 (それは速くなります)フロントエンドで可能なアレンジメントのリストが生成され、多くの場合、特定のユーザが最後に見たアレンジをDBに保存するため、キャッシングはありません。 – abought
これがあります:http://stackoverflow.com/questions/7918806/finding-n-th-permutation-without-computing-othersそれでも、必要な順列を得るために*何かを反復する必要があります。多分それはあなたのために働くでしょう。 –