2つの配列[1,2]と[7,8]が与えられた場合、それをマージして[[1,7]、[2,8]]を形成する最も効率的な方法は何ですか。私たちはこれができることを知っています:
a1 = [1,2], a2 = [7,8], a3=[];
for (var i=0; i<a1.length; i++) {
a3.push([a1[i], a2[i]]);
}
私は大きな配列を扱っています。だから私はもっと良い方法があるかどうかを見たいと思います。
2つの配列[1,2]と[7,8]が与えられた場合、それをマージして[[1,7]、[2,8]]を形成する最も効率的な方法は何ですか。私たちはこれができることを知っています:
a1 = [1,2], a2 = [7,8], a3=[];
for (var i=0; i<a1.length; i++) {
a3.push([a1[i], a2[i]]);
}
私は大きな配列を扱っています。だから私はもっと良い方法があるかどうかを見たいと思います。
すべての要素に一度触れる必要があるため、O(n)よりも速くこれを行う方法はありません。
それは良い質問です!
まず、忘れてしまったように見えるキーワードを使用a1,a2,a3
して、ローカルスコープに割り当てるようにしてください。var
そうしないと、パフォーマンスが大幅に低下する可能性があります。
コードとパフォーマンスの比較について。ここで結果をテスト/確認できます:
純粋なJavaScript:
var a1 = [1, 2],
a2 = [7, 8],
a3 = [];
for (var i = 0; i < a1.length; i++) {
a3.push([a1[i], a2[i]]);
}
JS /ネイティブメソッド:
var a1 = [1, 2],
a2 = [7, 8],
a3 = [];
a3 = a1.map(function(e, i, a) {
return [e, a2[i]]
})
もちろん、より多くの可能な実装がありますが、重要なのは、Travis Jが親切に指摘したように、 O(n)時間でforループと単純なパッキングに勝るものはおそらく他にないということです。
エンジン/最適化:Chromev29経由のV8JavaScriptエンジン
基本的にPythonの関数と同じ関数を探しているzip
ので、古いSOの質問に対する回答を確認してください。
いいえ、それはそれが得るのとほぼ同じくらい効率的です。O(n)時間で実行されています。本当にあなたが尋ねることができるより多くはありません。最適化できるものがあるとすれば、それはa1をマップに変換することですが、それはメモリの最適化であり、代わりに速度を上げたいようです。