我想在OCaml中创建一个查找表。该表将有7000多个条目,在查找(通过int)时,返回一个字符串。用于此任务的适当数据结构是什么?该表是否应该从基本代码中外部化,如果是,那么如何“包括”可以从他/她的程序访问查找表?
感谢。
答案 0 :(得分:7)
如果使用连续整数对字符串进行寻址,则可以使用数组。
否则,您可以使用哈希表(非功能)或Map(功能)。要开始使用Map,请尝试:
module Int =
struct
type t = int
let compare = compare
end ;;
module IntMap = Map.Make(Int) ;;
答案 1 :(得分:5)
let table : (int,string) Hashtbl.t = Hashtbl.create 8192
答案 2 :(得分:4)
要将表存储在单独的文件中(例如作为数组),只需创建一个包含以下内容的文件strings.ml
:
let tbl = [|
"String 0";
"String 1";
"String 2";
...7000 more...
|]
用以下内容编译:
ocamlc -c strings.ml
如manual中所述,这定义了其他Ocaml模块可以引用的模块Strings
。例如,您可以开始一个顶级:
ocaml strings.cmo
通过访问数组中的特定位置来查找字符串:
Strings.tbl.(1234) ;;