2009-02-06 20 views
5

我想在OCaml中創建一個查找表。該表將有7000多個條目,在查找時(由int)返回一個字符串。什麼是適合此任務的適當數據結構?該表是否應該從基本代碼中體現出來,如果是這樣,那麼如何從他/她的程序中「查找」查詢表?OCaml中的查找表

謝謝。

+0

您的意思是「包括」在這裏是不明確的。也許你可以給你一些僞代碼來做你想做的事情? – 2009-02-06 19:16:37

+0

我的意思是「包含」是從代碼中外部化數據,有點像頭文件。 OCaml可能嗎? – 2009-02-06 20:42:59

+0

仍不確定你的意思。 OCaml有一個不需要頭文件的獨立編譯系統。只需確保模塊在編譯時位於包含路徑中。 – 2009-02-08 01:57:51

回答

7

如果使用連續整數尋址字符串,則可以使用數組。

否則,你可以使用散列表(非功能)或地圖(功能)。要開始使用地圖的嘗試:

module Int = 
struct 
    type t = int 
    let compare = compare 
end ;; 

module IntMap = Map.Make(Int) ;; 

如果表格太大存儲在內存中,您可以將其存儲在外部數據庫,並使用綁定dbm,BDB,sqlite ...

5
let table : (int,string) Hashtbl.t = Hashtbl.create 8192 
4

要存儲在單獨的文件(例如,作爲一個數組)的表,簡單地創建一個文件strings.ml與內容:

let tbl = [| 
    "String 0"; 
    "String 1"; 
    "String 2"; 
    ...7000 more... 
|] 

與編譯該

manual中所述,這定義了其他Ocaml模塊可以引用的模塊Strings。例如,你可以開始一個頂層:

ocaml strings.cmo 

而且通過訪問陣列中的一個特定位置查找的字符串:

Strings.tbl.(1234) ;;