Преобразование хеш-таблицы в список пар (ключ, значение) в OCaml

Есть ли способ преобразовать хеш-таблицу в список (ключей, пар) значений в OCaml?

Я знаю, что с хеш-таблицей ht мы можем сделать

BatList.of_enum (BatHashtbl.enum ht)

используя библиотеку батарей. Это преобразует таблицу в перечисление, а затем преобразует перечисление в список. Но я ищу решение, которое не использует библиотеку батарей. В стандартном модуле OCaml Hashtbl не похоже быть способом извлечения пар в виде списка или способом комбинирования его функций для достижения этой цели. Какие-либо предложения?


person Surikator    schedule 30.10.2010    source источник
comment
Кстати, я думаю, что указание в вопросе, куда вы смотрели (как вы это сделали здесь), является очень хорошей практикой: это помогает дать ответ на правильном уровне, показать, что вы пытались, и сэкономило мне время, чтобы найти тип Hashtbl.fold :) (который я не знаю наизусть, но, как правило, когда он называется fold, это тип fold_right)   -  person Pascal Cuoq    schedule 30.10.2010


Ответы (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 []
person Pascal Cuoq    schedule 30.10.2010