2010-02-10 85 views
4

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

回答

1

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

装载大约200万键值对

如果是这样,那么你可以做任何关于它的情况,但使用后产生了一个符号表溢出运行时错误由于应用程序设计,如果字符串不是一个选项,它就是原生的64位版本的ruby。否则,你将不得不使用字符串。转换很简单:

:symbol.to_s == "symbol" 
"symbol".to_sym == :symbol 
+3

或使用字符串! – Peter 2010-02-10 19:23:47

+0

认为你遇到了问题!谢谢! – Chris 2010-02-10 20:10:11

2

虽然使用符号而不是字符串键通常更有效,但获得的效率数量与所涉及的重复级别成比例。由于您的密钥在定义上是独一无二的,因此您应该只使用字符串键来避免干扰符合表的整个条目。

+1

我假设在查找时有一些节省,但至少有多少,尚不清楚。所以字符串可能就足够了。 – Chris 2010-02-10 20:11:54

+0

在查找时,如果您试图解析的密钥先前已被编码,则只会节省一笔开销,即使如此,也很容易认为将字符串散列为符号的效率较低,然后散列符号本身比简单地散列串。毕竟,整个符号空间都是散列函数。 – tadman 2010-02-10 23:00:03