如何序列化/反序列化hashmap?

don*_*llo 10 serialization haskell

我有一个包含数百万条目的大型hashmap,我想将它保存到磁盘,这样当再次从磁盘读取时,我没有将键值对重新插入映射的开销.

我试图使用谷物库来做到这一点,但似乎HashMap数据类型需要派生Generic.有没有办法做到这一点?

mer*_*ict 5

您可以使用独立派生来生成自己的Generic实例HashMap.你可能会得到一个关于孤儿实例的警告,但你也可能不在乎:)无论如何,我还没试过这个,但它可能值得一试......

  • 我认为这是一个很好的答案.还有一点可能是如何避免孤立实例的技巧:只需定义一个包装HashMap的新类型并定义此类型的实例.当您需要序列化HashMap时,只需将其包装在您的类型和序列化中. (2认同)

don*_*llo 1

目前,没有办法在不修改 HashMap 库本身的情况下使 HashMap 可序列化。

使用独立派生(如 @mergeconflict 的答案所述)不可能使 Data.HashMap 成为 Generic 的实例(与谷物一起使用),因为 Data.HashMap 不会导出其所有构造函数(这是 GHC 的要求)。

因此,序列化 HashMap 的唯一解决方案似乎是使用 toList/fromList 接口。