Ответ 1
Невозможно сделать это быстрее, чем O (n), потому что каждый элемент нужно трогать один раз.
Учитывая 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), потому что каждый элемент нужно трогать один раз.
В основном вы ищете функцию, идентичную функции Python zip
, поэтому проверьте ответы на более старый вопрос SO:
Это хороший вопрос!
Прежде всего, убедитесь, что вы назначили 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]]
})
Конечно, возможны более реалистичные реализации, но дело в том, что, возможно, никакая другая реализация не может превзойти за цикл и прямую упаковку в O (n) -time, как любезно указано Travis J.
Двигатель/оптимизирован: V8 JavaScript Engine через Chrome v29
Нет, это так же эффективно, как и получается. Он работает в O (n) времени. На самом деле не намного больше вы можете спросить. Если вы что-то можете оптимизировать, это превратит a1 в карту, но эта оптимизация для памяти, и похоже, что вы хотите ускорить работу.