假设我有一些查找表,q(w, x, y, z)
,其中键的各种组合映射到不同的值;即,q(0, 0, 0, 0) = a
,q(0, 0, 0, 1) = b
,q(15, 16 , 23, "b") = c
。
就效率而言,在 Ruby 中实现此结构的最佳方法是什么? key 将动态生成,通常是字符串。我可以想到三种不同的哈希键控方法:
- 使用字符串作为键:
q["a, b, c, d"] = 0
- 使用单个数组作为键:
q[["a", "b", "c", "d"]] = 0
- 使用哈希的哈希:
q["a"]["b"]["c"]["d"] = 0
我目前正在使用方法 2,它比我希望的要慢一点。这些键组合是动态生成的——如果我使用一个包含单个字符串的散列,字符串连接会更快吗?我应该首先从散列的散列开始吗?这种方法会占用更多的内存空间吗?
最佳答案
我会选择像您的 #1 这样的方法:创建一个字符串,然后将其作为您的 map 键。但是,请确保您的“代理哈希键”对于各种值组合而言都是唯一的。在这种情况下,您只需构建一个简单的字符串并需要一个映射。
一般来说,您希望 map 键尽可能不可变。 (一个关键的变异可能会弄乱表格)。有时在 Ruby 中会很困惑,因为字符串是可变的,但仍然是一个有值(value)的目标。
关于 ruby 性能 : Multi-key hashes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8205450/