5

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

谢谢。

4

3 回答 3

8

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

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

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

module IntMap = Map.Make(Int) ;;

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

于 2009-02-06T15:23:12.520 回答
5
let table : (int,string) Hashtbl.t = Hashtbl.create 8192
于 2009-02-06T14:59:15.160 回答
4

要将表存储在单独的文件中(例如作为数组),只需创建一个strings.ml包含内容的文件:

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

编译:

ocamlc -c strings.ml

手册中所述,这定义了Strings其他 Ocaml 模块可以引用的模块。例如,您可以启动一个顶层:

ocaml strings.cmo

并通过访问数组中的特定位置来查找字符串:

Strings.tbl.(1234) ;;
于 2009-02-09T12:14:47.233 回答