我正在使用几个哈希值,其中一些哈希值是其他哈希值的键。
我需要使用 key
多次获取值的键,以便我可以使用它访问另一个哈希中的内容。
我想知道这可能会对性能产生什么样的影响。在我的情况下,这些哈希的数量很少,内容也很少,但我想从理论上知道。
我应该避免过度使用它吗?与获取键的值相比,它的性能如何?
最佳答案
这样想:您偶尔会执行额外的步骤来获取值。每当您使用条件测试并向计算添加几个步骤时,就会发生这种情况。
很明显,它会带来一些开销,但此时担心它是过早的优化。您可以通过使用 Benchmark 来感受差异。类来测试您获取哈希键的替代方法与正常方法。
我怀疑您必须执行数百万次循环才能看到明显的差异。
这是我创建@fontanus 提到的反向映射的方法:
hash = {a:1, b:2}
hash.merge!(Hash[hash.values.zip(hash.keys)])
结果是:
{
:a => 1,
:b => 2,
1 => :a,
2 => :b
}
也可以通过将散列强制转换为数组,将其展平并反转,然后将其转回散列来完成,但我发现这不如上面的直观。 YMMV.
hash.merge!(Hash[*hash.to_a.flatten.reverse])
@steenslag 让我想起了 Hash.invert
.我知道有一些东西但不记得方法名称:
>> hash.merge!(hash.invert) { :a => 1, :b => 2, 1 => :a, 2 => :b }
为此给他点赞!
关于ruby - Ruby 哈希的 "key"函数有多昂贵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16338415/