Frage

Ich möchte eine Lookup-Tabelle in OCaml erstellen. Die Tabelle wird 7000+ Einträge, die auf Lookup (von int), einen String zurück. Was ist eine geeignete Datenstruktur für diese Aufgabe zu benutzen? Sollte die Tabelle aus dem Basiscode externalisiert wird, und wenn ja, wie man geht über „einschließlich“ die Lookup-Tabelle von seinem / ihrem Programm zugänglich zu sein?

Danke.

War es hilfreich?

Lösung

Wenn die Saiten adressiert aufeinanderfolgenden ganzen Zahlen verwenden Sie ein Array verwenden können.

Ansonsten können Sie eine Hash-Tabelle (nicht funktionsfähig) oder eine Karte (funktionale) verwenden. Um mit der Karte Versuch gestartet:

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

module IntMap = Map.Make(Int) ;;

Wenn die Tabelle zu groß ist, im Speicher zu speichern, können Sie es in einer externen Datenbank speichern und verwenden Bindungen dbm , BDB sQLite , ...

Andere Tipps

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

, um die Tabelle speichern in einer separaten Datei (zum Beispiel als ein Array), einfach eine Datei mit dem Inhalt strings.ml erstellen:

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

Übersetzen dies mit:

ocamlc -c strings.ml

Wie in dem Handbuch , diese definiert ein Modul Strings dass andere Ocaml Module verweisen können. Zum Beispiel können Sie ein Top-Level starten:

ocaml strings.cmo

Und Nachschlag eine Zeichenfolge durch eine bestimmte Position in dem Array zuzugreifen:

Strings.tbl.(1234) ;;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top