ruby - Ruby 哈希的 "key"函数有多昂贵?

标签 ruby hash key reverse-lookup

我正在使用几个哈希值,其中一些哈希值是其他哈希值的键。

我需要使用 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/

相关文章:

android - 使用不同 key 签名的 apk,上传到 Playstore 时出错

ios - 从NSDictionary检索 key

ruby-on-rails - bundle 安装不起作用

ruby - 如何将 `Explain` 与 `find_by_sql` 查询一起使用?

ruby x[0...i] 做什么

PHP 和 URL 的哈希/片段部分

java - 对ECC公钥的长度感到困惑

ruby-on-rails - 如何将 SoundCloud 集成到 Ruby on Rails 中?

url - 为什么Google搜索会使用客户端网址参数?

javascript - 将 url 哈希值的前 n 个字符中的哈希值替换为字符串