【问题标题】:What is the most efficient way of merging [1,2] and [7,8] into [[1,7], [2,8]]将 [1,2] 和 [7,8] 合并为 [[1,7], [2,8]] 的最有效方法是什么
【发布时间】:2012-05-04 19:43:56
【问题描述】:

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

我正在处理一个大数组。所以想看看有没有更好的办法。

【问题讨论】:

  • AFAIK,你做得很好:)

标签: javascript


【解决方案1】:

没有办法比 O(n) 更快,因为每个元素都必须被触摸一次。

【讨论】:

    【解决方案2】:

    不,这是最有效的。它在 O(n) 时间内运行。你真的不能再问了。如果有什么可以优化的,那就是将 a1 转换为地图,但这是对内存的优化,听起来你想加快速度。

    【讨论】:

      【解决方案3】:

      您基本上是在搜索与 Python 的 zip 函数相同的函数,因此请查看较早的 SO 问题的答案:

      Javascript equivalent of Python's zip function

      【讨论】:

        【解决方案4】:

        这是个好问题!

        首先,确保您通过 var 关键字将 a1,a2,a3 分配给本地范围,您似乎忘记了。否则性能会受到极大影响。

        至于代码性能比较。可以测试/查看结果here:

        纯 JavaScript:

        var a1 = [1, 2],
          a2 = [7, 8],
          a3 = [];
        for (var i = 0; i < a1.length; i++) {
          a3.push([a1[i], a2[i]]);
        }
        

        JS/Native 方法:

        var a1 = [1, 2],
          a2 = [7, 8],
          a3 = [];
        a3 = a1.map(function(e, i, a) {
          return [e, a2[i]]
        })
        

        当然还有更多可能的实现,但关键是在 O(n) 时间内,可能没有其他实现可以击败 for 循环和直接打包,正如 Travis 善意指出的那样J.

        引擎/优化:通过 Chrome v29

        实现的 V8 JavaScript 引擎

        【讨论】:

          猜你喜欢
          • 2020-10-15
          • 2023-03-17
          • 2020-09-07
          • 1970-01-01
          • 2014-04-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多