在Ocaml中打印哈希映射的内容

在Ocaml中打印哈希映射的内容,ocaml,hashtable,Ocaml,Hashtable,在Ocaml中打印哈希表内容的最简单方法是什么?我是Ocaml的新手,到现在为止我所看到的一切看起来都非常复杂。 举个例子,如果我们生成这样一个简单的哈希表: # let ht = Hashtbl.create 100;; # Hashtbl.add ht "x" "a"; Hashtbl.add ht "x" "b"; Hashtbl.add ht "y" "c";; # print_hash ht;; 我想这样打印出来: # let ht = Hashtbl.create 100

在Ocaml中打印哈希表内容的最简单方法是什么?我是Ocaml的新手,到现在为止我所看到的一切看起来都非常复杂。 举个例子,如果我们生成这样一个简单的哈希表:

# let ht = Hashtbl.create 100;;
# Hashtbl.add ht "x" "a";
  Hashtbl.add ht "x" "b";
  Hashtbl.add ht "y" "c";;
# print_hash ht;;
我想这样打印出来:

# let ht = Hashtbl.create 100;;
# Hashtbl.add ht "x" "a";
  Hashtbl.add ht "x" "b";
  Hashtbl.add ht "y" "c";;
# print_hash ht;;
然后得到以下结果:

x:a,b

y:c

我想我必须使用封送模块,但我真的不知道如何使用
因为使用to_string选项,结果不是可读的。

一个简单的技巧在于使用
Hashtbl.iter

 Hashtbl.iter (fun x y -> Printf.printf "%s -> %s\n" x y) ht;;

给定的函数具有第一个参数,需要两个参数,即键和值。

假设键和值是字符串,则此操作有效:

# let open BatInnerIO in
  BatHashtbl.print write_string write_string stdout ht;;
这将打印一个格式相当整齐的字符串:

{
Key1: Value1,
Key2: Value2
}
如果您的键和/或值类型不是字符串,您可以使用其他打印机,例如
write_i64
来写
int64
,等等


也可以打印到
stderr

注意,由于哈希表的工作方式,您将得到
x->b
a
值被覆盖。在Ocaml中,Hashtbl可以有多个具有相同键值的条目——就像J.Abe编写的示例一样;返回两个值a和b,这是命令输出:#Hashtbl.iter(fun x y->Printf.Printf”%s->%s\n“x y)ht;;y->Cx->Bx->aMy bad,我总是把行为和地图混淆。一旦安装了电池库,它就可以完美地工作。