Pergunta
Eu gostaria de criar uma tabela de pesquisa em OCaml. A tabela terá 7000+ entradas que, após a pesquisa (por int), retornam um string. O que é uma estrutura de dados apropriada para usar para esta tarefa? Caso a tabela de ser exteriorizada a partir do código base e caso afirmativo, como se faz para "incluindo" a tabela de referência para ser acessível a partir de sua / seu programa?
Graças.
Solução
Se as cordas são abordados usando inteiros consecutivos você poderia usar uma matriz.
Caso contrário, você pode usar uma tabela hash (não-funcionais) ou um mapa (funcional). Para começar com a tentativa Mapa:
module Int =
struct
type t = int
let compare = compare
end ;;
module IntMap = Map.Make(Int) ;;
Se a tabela for muito grande para armazenar na memória, você pode armazená-lo em um banco de dados e utilização de ligações externas a dbm , a BdB, sqlite , ...
Outras dicas
let table : (int,string) Hashtbl.t = Hashtbl.create 8192
Para armazenar a tabela num ficheiro separado (por exemplo, como uma matriz), simplesmente criar um strings.ml
ficheiro com o conteúdo:
let tbl = [|
"String 0";
"String 1";
"String 2";
...7000 more...
|]
Compilar isso com:
ocamlc -c strings.ml
Como explicado na o manual, este define um Strings
módulo que outros módulos Ocaml pode fazer referência. Por exemplo, você pode começar um nível superior:
ocaml strings.cmo
E pesquisar uma string, acessando uma posição particular na matriz:
Strings.tbl.(1234) ;;