我正在計算大型XML文件中屬於鍵(標籤)的某些值的頻率(例如鍵「國家」值「USA」,「GER」,「FRA」等發生了多少次) 。我爲所有可能的鑰匙做這個。地圖在Scala中可以包含多少個鍵是否有限制?
的數據結構使用:
type IntHash=Map[String,Int]
def IntHash()=Map[String,Int]()
type IntHash2=Map[String,IntHash]
def IntHash2()=Map[String,IntHash]()
var keyfreqs:IntHash2=IntHash2()
我更新的結構是這樣的:
if(current_tag!="name")
{
var keyfreq=keyfreqs.getOrElse(current_tag,IntHash())
keyfreq+=(current_value->(keyfreq.getOrElse(current_value,0)+1))
keyfreqs+=(current_tag->keyfreq)
}
所有按鍵可以在除了名字最幾千個不同的值。文件中可能有數十萬個不同的名稱。正如你所看到的,我不允許計算關鍵字「name」的可能值,因爲如果我這樣做,程序將停止工作(keyfreq中的鍵會丟失)。
地圖在Scala中可以包含多少個鍵是否有限制? (如果我允許名字,但只處理有限數量的記錄,則該程序有效。)
你的內存限制。 – Maxim
然後我不明白髮生了什麼事,因爲程序從不抱怨內存不足。非常奇怪的行爲:如果我爲1000條記錄運行它,則按預期生成everthing。如果我爲100000條記錄運行它,除keyfreqs之外的所有密鑰均消失(如果剩餘的一個密鑰正確,則內容將消失)。這裏是整個程序:https://github.com/fideplayerslist/fideplayerslist/blob/master/players.scala(我玩弄MAXCNT) – javachessgui
你的代碼太長,並且有許多問題混在一起。我想你有一個錯誤。嘗試創建一小段模擬您的問題的代碼,然後我們可以嘗試提供幫助。 – Maxim