2011-08-26 54 views

回答

1

假設您輸入裝入內存,通過它循環。跟蹤字典中每個字符串的ID。如果它不適合內存,使用排序,然後分組來完成相同的想法。

在蟒蛇:

進口SYS

做到這一點
import sys 

next_id = 0 
str_to_id = {} 
for line in sys.stdin: 
    fields = line.strip().split(',') 
    this_id = str_to_id.get(fields[0]) 
    if this_id is None: 
     next_id += 1 
     this_id = next_id 
     str_to_id[fields[0]] = this_id 
    fields[0] = str(this_id) 

    print ','.join(fields) 
+2

有一個在亨利馬烏其中做這種自動的,叫做'IDMigrator'一個組成部分,但我也建議翻譯成數字ID外部。 –

3

的一種方法是通過創建FileDataModel的延伸。你需要重寫readUserIDFromString(String value)方法使用某種解析器做轉換。您可以使用IDMigrator的實現方式之一,肖恩建議。

例如,假設你有一個初始化MemoryIDMigrator,你可以這樣做:

@Override 
protected long readUserIDFromString(String stringID) { 
    long result = memoryIDMigrator.toLongID(stringID); 
    memoryIDMigrator.storeMapping(result, stringID); 
    return result; 
} 

這樣,您就可以使用memoryIDMigrator做反向映射了。如果你不需要,你可以只哈希它是在他們的實現(它在AbstractIDMigrator)所做的那樣。

3

帳戶及的itemId可以是字符串,所以this is the CustomFileDataModel將您的字符串轉換成整數,將保留地圖(字符串,ID)在內存中;建議之後,您可以從id獲取字符串。

+0

儘管這個鏈接可能回答這個問題,但最好在這裏包含答案的重要部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 –

+0

@ moskito-X感謝建議。 – KlwntSingh