PHP的associative array对应Haskell中的哪种等效数据结构?
PHP关联数组在Haskell中的等效实现
你给出的PHP关联数组代码如下:
$array = [ 'A' => [1,2,3], 'B' => [4,5,6], 'C' => [7,8,9], ];
Haskell中最常用的等效键值对结构是Data.Map,属于官方维护的containers依赖包,实现为有序的平衡二叉树,支持高效的查找、插入、删除操作。
等效实现代码
-- 导入Data.Map模块,通常用qualified导入避免和Prelude的基础函数命名冲突 import qualified Data.Map as Map -- 声明类型:键为String类型,值为Int列表类型 myMap :: Map.Map String [Int] myMap = Map.fromList [ ("A", [1, 2, 3]) , ("B", [4, 5, 6]) , ("C", [7, 8, 9]) ]
补充说明
- 和PHP可变的关联数组不同,
Data.Map是不可变结构,所有修改操作都会返回一个新的Map实例,不会修改原对象。 - 取值操作对应PHP的
$array['A'],在Haskell中写为Map.lookup "A" myMap,返回Maybe [Int]类型,存在对应键时返回Just [1,2,3],不存在时返回Nothing,不会出现PHP访问不存在键的警告问题,安全性更高。 - 你也可以根据场景选择其他更适配的键值对结构:
- 键为Int类型时,可以用
Data.IntMap,性能比普通Map更高 - 不需要键有序的场景,可以用
Data.HashMap(来自unordered-containers包),查找插入性能更优
- 键为Int类型时,可以用
内容的提问来源于stack exchange,提问作者Julian
相关产品推荐
相关产品推荐

