2010-10-30 1 views
10

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

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

BatList.of_enum (BatHashtbl.enum ht) 

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

+1

Кстати, я думаю, что говорят в вопросе, где вы смотрели (как вы делали здесь) очень хорошая практика: это поможет дать ответ на право уровне, покажите, что вы попробовали, и сохранили мне время, чтобы посмотреть тип Hashtbl.fold :) (что я не знаю наизусть, но, как правило, когда он называется 'fold', тип таков, что of 'fold_right') –

ответ

27

В стандартном 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 [] 
+0

Отлично! Большое спасибо! – Surikator