2010-02-10 62 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