OCaml中的查找表

时间:2009-02-06 11:52:54

标签: ocaml lookup

我想在OCaml中创建一个查找表。该表将有7000多个条目,在查找(通过int)时,返回一个字符串。用于此任务的适当数据结构是什么?该表是否应该从基本代码中外部化,如果是,那么如何“包括”可以从他/她的程序访问查找表?

感谢。

3 个答案:

答案 0 :(得分:7)

如果使用连续整数对字符串进行寻址,则可以使用数组。

否则,您可以使用哈希表(非功能)或Map(功能)。要开始使用Map,请尝试:

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

module IntMap = Map.Make(Int) ;;

如果表太大而无法存储在内存中,您可以将其存储在外部数据库中并使用绑定到dbm,bdb,sqlite,...

答案 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) ;;