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.

Foi útil?

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) ;;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top