代码之家  ›  专栏  ›  技术社区  ›  Justin L.

Ruby中优化的多维数组

  •  4
  • Justin L.  · 技术社区  · 16 年前

    典型的解决方案可能包括使用一个一维数组,并通过 x*width + y

    Ruby有能力过载 [] multi_dimensional_array[2,4] 甚至可以使用splat来支持任意维度量。(但实际上,我只需要两个维度)

    这个

    如果有帮助的话,我的脚本主要使用随机查找和较少的遍历。

    3 回复  |  直到 16 年前
        1
  •  4
  •   John La Rooy    16 年前

    narray

    NArray是一个数值N维 数组类。支持的元素类型 和Ruby对象。此扩展 库包含快速计算 而且容易操作大的 数值数组到Ruby中 语言。纳雷也有类似的特征 矩阵子类。

        2
  •  2
  •   sled    16 年前

    大规则:不要在嵌套数组中跳跃,尝试从一行到另一行线性遍历它。

        3
  •  2
  •   bta    16 年前

    你可以继承 Array 并创建自己的类来模拟多维数组(但在内部是一个简单的一维数组)。您可能会从中看到一些加速,但是如果不同时编写代码和分析代码,就很难说了。

    您还可以尝试使用 NArray

    除此之外,嵌套数组查找可能并不是它们看起来的真正瓶颈。有好几次,我也遇到了同样的问题,后来发现重新编写一些逻辑消除了瓶颈。它不仅仅是加快嵌套查找的速度,而是最小化所需的查找数量。在一个 n n

    array.each {|x|
        x.each {|y|
            y.each {|z|
                ...
            }
        }
    }
    

    这允许您在第一维度中执行单个查找,然后访问“后面”的所有内容,然后在第二维度中执行单个查找,等等。这将导致比随机访问元素少得多的查找。

    如果需要随机元素访问,可以尝试使用散列。您可以获取数组索引,将它们作为字符串连接在一起,并将其用作哈希键(例如, array[12][0][3] 变成 hash['0012_0000_0003'] ). 这可能会导致更快的“随机访问”时间,但您希望对其进行分析以确定。