将哈希表转换为 OCaml 中的对列表(键、值)

Posted

技术标签:

【中文标题】将哈希表转换为 OCaml 中的对列表(键、值)【英文标题】:Converting hash table to list of pairs (key,value) in OCaml 【发布时间】:2011-05-02 21:04:56 【问题描述】:

有没有办法将哈希表转换为 OCaml 中的(键、对)值列表?

我知道,给定一个哈希表 ht 我们可以做到

BatList.of_enum (BatHashtbl.enum ht)

使用电池库。这会将表转换为枚举,然后将枚举转换为列表。但我正在寻找不使用电池库的解决方案。在standard OCaml Hashtbl Module 中似乎没有一种方法可以将这些对提取为列表,也没有一种方法可以组合其功能来实现此目的。有什么建议吗?

【问题讨论】:

顺便说一句,我认为在你看过的问题中说(就像你在这里所做的那样)是非常好的做法:它有助于在正确的水平上提供答案,表明你已经尝试过,并且节省了我查找 Hashtbl.fold 类型的时间 :) (我不知道,但根据经验,当它被称为 fold 时,类型是 fold_right 的类型) 【参考方案1】:

在标准的 OCaml Hashtbl 模块中似乎没有...

当然有!

val fold : ('a -> 'b -> 'c -> 'c) -> ('a, 'b) t -> 'c -> 'c

所以,使用:

fun h -> Hashtbl.fold (fun k v acc -> (k, v) :: acc) h []

【讨论】:

以上是关于将哈希表转换为 OCaml 中的对列表(键、值)的主要内容,如果未能解决你的问题,请参考以下文章

谁能告诉我哈希是啥?

如何将哈希映射键转换为列表?

哈希表

在处理数据结构中的复杂键(如 int*int*int)时,F# 比 Ocaml 慢得多

将数组值转换为哈希键

如何在ocaml中将字符串转换为整数列表?