私は0から20000になるint32のIDを持っているので、それらをJavaScriptの配列に配置する必要があります。だから、アレイは20,000アイテムほどの大きさであるかもしれません。Javascript:20,000の数値を格納してチェックする最も効率的な方法は?
次に、いくつかのIDがそのリストに含まれているかどうかを確認する必要があります。
これを行う最も効率的な方法は何なので、ブラウザのメモリがクラッシュすることはありませんか?
私は0から20000になるint32のIDを持っているので、それらをJavaScriptの配列に配置する必要があります。だから、アレイは20,000アイテムほどの大きさであるかもしれません。Javascript:20,000の数値を格納してチェックする最も効率的な方法は?
次に、いくつかのIDがそのリストに含まれているかどうかを確認する必要があります。
これを行う最も効率的な方法は何なので、ブラウザのメモリがクラッシュすることはありませんか?
メモリを減らしたい場合は、数字を16ビットの符号なし整数の配列に格納します。これにより、0〜65535の数値を格納できます。
ただし、検索が遅くなる可能性があります。そして20000の数字は過度のメモリを無駄にしません。
20000 * 64 bit = 1280000 bit = 160000 byte = 156.25 kibibyte
私はSetまたはオブジェクトを提案します。設定操作は、平均でサブラインにする必要があります。
var s = new Set();
s.add(id); // store id
s.has(id); // check id
s.delete(id); // remove id
s.size; // count ids
for(var id of s) {} // iterate ids, in insertion order
var s = Object.create(null);
s[id] = true; // store id
id in s; // check id
delete s[id]; // remove id
for(var id in s) {} // iterate stringified ids, in implementation-defined order
あなたの番号の範囲が限られている場合、最も効率的な方法は、パックされたビット列、番号ごとに1ビットでそれらを格納することです。ビット配列は、(=そのビットがセットされている)数N
が配列であるかどうかを確認するために、そして、Uint8Array
として表すことができ、
array[N >> 3] & (1 < (N & 7))
は、あなたが何かを試してみました計算?私たちにいくつかのコードを教えてくれますか? – tptcat
この他の質問が参考になるかもしれません。また、オブジェクトが配列内にあるかどうかをチェックする最も効率的な方法を指します。 http://stackoverflow.com/questions/237104/how-do-i-check-if-an-array-includes-an-object-in-javascript – Davis
20000の配列がNCSAモザイクの問題になる可能性がありますが、今日のどのブラウザでも、あなたは「ブラウザのメモリをクラッシュさせる」ということを疑うでしょう。 –