ocaml中的哈希表

时间:2012-01-22 17:07:09

标签: hashtable ocaml

是否可以在Ocaml中的相同哈希表(Hashtbl)中存储不同类型?哈希表真的只限于一种类型吗?

1 个答案:

答案 0 :(得分:23)

是的,每个表的哈希表条目限制为一种类型。这实际上是关于OCaml类型系统的问题,而不是关于哈希表的问题。如果要求在哈希表中使用相同的类型似乎很奇怪,那么在列表中怎么样?

在不知道你正在解决的问题的情况下,很难知道建议什么。但是,常见的做法是创建一个代数类型,对于您正在处理的每种类型都有一个变量:

type alg = A of int | B of float

type(string,alg)的值Hashtbl.t将使用字符串作为查找键来存储整数和浮点数。

# let ht = Hashtbl.create 44;;
val ht : ('_a, '_b) Hashtbl.t = <abstr>
# Hashtbl.add ht "yes" (A 3);;
- : unit = ()
# Hashtbl.add ht "no" (B 1.7);;
- : unit = ()
# ht;;
- : (string, alg) Hashtbl.t = <abstr>
# Hashtbl.find ht "yes";;
- : alg = A 3

在您习惯了OCaml的灵活且强大的输入后,如果没有它,很难回到系统。