2011-11-20 109 views
1

假设我有一些查找表,q(w, x, y, z),其中键的各种组合映射到不同的值;即,q(0, 0, 0, 0) = a,q(0, 0, 0, 1) = b,q(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

我目前使用的方法2,这是一个慢一点比我想的。这些组合键是动态生成的 - 如果我使用一个只接受一个字符串的散列,字符串连接会更快吗?我是否应该首先使用哈希散列?这种方法会在内存中占用更多空间吗?

回答

1

我会选择一些你的#1:创建一个字符串,然后将作为地图的关键。但是,确保您的'代理散列键'对于各种值的组合是适当唯一的。在这种情况下,您只需构建一个简单的字符串并需要一张地图。

一般来说你要映射按键尽可能不变。 (一个关键的变异可能会弄乱桌子)。由于字符串是可变的,但有时还是一个有价值的目标。