Ruby性能:多键哈希

时间:2011-11-20 22:53:46

标签: ruby performance data-structures hash

假设我有一些查找表q(w, x, y, z),其中各种键组合映射到不同的值;即,q(0, 0, 0, 0) = aq(0, 0, 0, 1) = bq(15, 16, 23, "b") = c

在效率方面,在Ruby中实现此结构的最佳方法是什么?密钥将动态生成,通常是字符串。我可以想到哈希的三种不同的键控方法:

  1. 使用字符串作为密钥:q["a, b, c, d"] = 0
  2. 使用单个数组作为密钥:q[["a", "b", "c", "d"]] = 0
  3. 使用散列哈希:q["a"]["b"]["c"]["d"] = 0
  4. 我目前正在使用方法2,它比我想要的慢一点。这些键组合是动态生成的 - 如果我使用一个带有单个字符串的哈希,字符串连接会更快吗?我应该首先开始使用散列哈希吗?这种方法会在内存中占用更多空间吗?

1 个答案:

答案 0 :(得分:1)

我会选择类似你的#1:创建一个字符串,然后它将作为你的地图密钥。但是,请确保您的“代理哈希键”对于各种值组合都是适当的唯一。在这种情况下,您只需构建一个简单的字符串并需要一个映射。

一般来说,您希望地图键尽可能不可变。 (一个关键的变异可能搞砸了桌子)。有时凌乱的Ruby因为字符串是可变的但仍然是一个有价值的目标。