【问题标题】:Symbol Table Overflow Issue in RubyRuby 中的符号表溢出问题
【发布时间】:2011-01-15 10:16:32
【问题描述】:

我编写了一些 Ruby 代码将 Google n-gram 数据导入哈希表,将单词 unigram 映射到它们各自的计数。我使用符号而不是字符串作为键。我已经在 linux 机器上运行这段代码一段时间了,没有任何问题。今天早上在我的 Mac 上运行它在加载大约 200 万个键值对后产生了符号表溢出运行时错误。我不明白是什么导致了这个错误。有人对可能的原因有什么建议吗?我在 OS X 10.5.8 下运行 Ruby 1.9.1。

【问题讨论】:

    标签: ruby hashtable symbols


    【解决方案1】:

    是64位bs的区别。 32位红宝石?我怀疑这是因为你的观察

    加载大约 200 万个键值对后产生符号表溢出运行时错误

    如果是这种情况,那么如果由于应用程序设计而无法选择字符串,那么您只能使用本机 64 位 ruby​​ 构建。否则,您将不得不使用字符串。转换很容易:

    :symbol.to_s == "symbol"
    "symbol".to_sym == :symbol
    

    【讨论】:

    • 认为你已经解决了问题!谢谢!
    【解决方案2】:

    虽然使用 Symbol 代替 String 通常更有效,但获得的效率与所涉及的重复程度成正比。由于您的键在定义上是唯一的,因此您可能应该只使用字符串键来避免塞满条目的符号表。

    【讨论】:

    • 我假设在查找方面有一些节省,但至于多少,目前还不清楚。所以字符串可能就足够了。
    • 在查找时,如果您尝试解析的密钥之前已被编码,则只会节省成本,即使这样,也很容易认为将字符串散列为符号,然后散列符号本身而不是简单地散列字符串。毕竟,整个符号空间的功能就像一个散列。
    猜你喜欢
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2016-01-31
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    • 2012-01-18
    • 2010-10-04
    相关资源
    最近更新 更多