在Ocaml中打印哈希映射的内容
在Ocaml中打印哈希表内容的最简单方法是什么?我是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
# 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,我总是把行为和地图混淆。一旦安装了电池库,它就可以完美地工作。