4

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]]);
}

私は大きな配列を扱っています。だから私はもっと良い方法があるかどうかを見たいと思います。

4

4 に答える 4

7

すべての要素に一度触れる必要があるため、O(n)よりも速くこれを行う方法はありません。

于 2012-04-24T07:18:34.910 に答える
4

それは良い質問です!

まず、忘れてしまったように見えるキーワードを使用a1,a2,a3して、ローカルスコープに割り当てるようにしてください。varそうしないと、パフォーマンスが大幅に低下する可能性があります。

コードとパフォーマンスの比較について。ここで結果をテスト/確認できます:

zipテスト

純粋な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エンジン

于 2013-07-28T17:06:08.467 に答える
1

基本的にPythonの関数と同じ関数を探しているzipので、古いSOの質問に対する回答を確認してください。

Pythonのzip関数に相当するJavascript

于 2012-04-24T07:19:39.627 に答える
0

いいえ、それはそれが得るのとほぼ同じくらい効率的です。O(n)時間で実行されています。本当にあなたが尋ねることができるより多くはありません。最適化できるものがあるとすれば、それはa1をマップに変換することですが、それはメモリの最適化であり、代わりに速度を上げたいようです。

于 2012-04-24T07:18:57.940 に答える