Поиск таблиц в OCaml - PullRequest
       26

Поиск таблиц в OCaml

5 голосов
/ 06 февраля 2009

Я хотел бы создать таблицу поиска в OCaml. В таблице будет более 7000 записей, которые при поиске (по int) возвращают строку. Какую структуру данных использовать для этой задачи? Должна ли таблица быть выведена из базового кода и если да, как можно «включить» таблицу поиска, доступную из его / ее программы?

Спасибо.

Ответы [ 3 ]

7 голосов
/ 06 февраля 2009

Если строки адресованы с использованием последовательных целых чисел, вы можете использовать массив.

В противном случае вы можете использовать хеш-таблицу (не функционально) или карту (функционал). Чтобы начать работу с картой, попробуйте:

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

module IntMap = Map.Make(Int) ;;

Если таблица слишком велика для хранения в памяти, вы можете сохранить ее во внешней базе данных и использовать привязки к дБм , bdb, sqlite , ...

5 голосов
/ 06 февраля 2009
let table : (int,string) Hashtbl.t = Hashtbl.create 8192
4 голосов
/ 09 февраля 2009

Чтобы сохранить таблицу в отдельном файле (например, в виде массива), просто создайте файл strings.ml с содержанием:

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

Скомпилируйте это с:

ocamlc -c strings.ml

Как объяснено в руководстве , это определяет модуль Strings, на который могут ссылаться другие модули Ocaml. Например, вы можете запустить уровень:

ocaml strings.cmo

И ищите строку, получая доступ к определенной позиции в массиве:

Strings.tbl.(1234) ;;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...