Haskell中的稀疏数组?

Jay*_*Jay 10 arrays haskell data-structures

是否有任何标准或"最常见"的方式来表示Haskell中的多维稀疏数组(不会过多牺牲性能)?

例如,像C++中的map <int,map <int,MyClass >>那样的东西.我用Google搜索,发现只是一些旧的学术论文和其他人也要求这样做.

谢谢!

Mar*_*ijn 8

Data.Map (Int,Int) MyClass是一个很好的建议; 先尝试一下.

如果你遇到太空问题,试试吧IntMap (IntMap MyClass).IntMapS(模块Data.IntMap)是Maps的IntS作为密钥; 专业化,他们比通用地图更有效.它可能会也可能不会产生重大影响.

还有可扩展的自适应持久容器类型项目,可能对您有用.这些容器(包括地图)使用的空间明显少于普通地图,但它们稍微复杂一些(虽然使用起来仍然相当容易).


new*_*cct 7

怎么样Data.Map (Int,Int) MyClass


eph*_*ent 5

HsJudy,它似乎很适合稀疏密钥集.

Judy绑定(一个实现快速稀疏动态数组的C库),用于Haskell,提供尽可能符合现有Haskell库接口的API,如Data.Map和Data.Array.MArray.Judy库的这种绑定包括它的四种类型:从单词到位的映射(Judy1),从单词到值(JudyL),从字符串到值(JudyHS)以及从字节数组到值(JudyHS).

但是我可能会遇到Data.Map.Map (Int, Int) MyClass可扩展性或可用性问题.