我的驱动器上有一个基于 trie 的字典,它被编码为连续的位封装 4 字节 trie 节点数组。在 Python 中,我将按以下方式将其读取为 4 字节整数的实际数组:
import array
trie = array.array('I')
try:
trie.fromfile(open("trie.dat", "rb"), some_limit)
except EOFError:
pass
如何在 Haskell 中执行相同操作(从文件读取到数组或向量)?我能想到的最好办法是照常读取文件,然后将字节分成四个 block ,并以算术方式将它们组合在一起,但这非常难看,而且还引入了对字节顺序的依赖。
最佳答案
encoded as a contiguous array of bit-packed 4-byte trie nodes
我认为这里的“编码”是某种 Python 格式?你说“原始 C 风格数组”?
要将此二进制文件(或任何其他格式)的数据加载到 Haskell 中,您可以使用 Data.Binary图书馆,并提供 an instance of Binary为您的自定义格式。
对于许多现有的数据交换格式,Hackage 上有库,但您需要指定格式。例如图像数据,有repa-devil .
对于真正的原始数据,您可以mmap it to a bytestring ,然后将其进一步处理成数据结构。
关于haskell - 在 Haskell 中从文件读取到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15232094/