如何在DAML中访问地图键/值?

时间:2019-05-28 00:55:31

标签: dictionary daml

尝试替换地图中的元素,但不确定如何完成。不知道该怎么做才能访问键或值。

尝试了以下代码,但是它抱怨无法识别键或值。

let map : Map Text OneElement = M.fromList (("0001", OneElement "one" 1 )::("0002", OneElement "two" 2 )::("0003", OneElement "three" 3 )::("0004", OneElement "four" 4 ):: [])
let result = fmap(\i -> if i.key=="0001" then (OneElement "somethingelse" 1111) else i.value) map  

还有如何在TextMap中访问键/值。

任何人都可以帮忙吗?谢谢。

1 个答案:

答案 0 :(得分:3)

fmap的{​​{1}}实现仅映射值,而不映射键值对:DA.Next.Map.Map。您可以进行查找并替换以下值:

fmap : (v -> w) -> Map k v -> Map k w

请注意,我已经将您的import DA.Next.Map as M data OneElement = OneElement with t : Text i : Int deriving (Eq, Show) mymap : Map Text OneElement = M.fromList [("0001", OneElement "one" 1), ("0002", OneElement "two" 2), ("0003", OneElement "three" 3), ("0004", OneElement "four" 4)] result = fmap (\i -> if i == OneElement "one" 1 then OneElement "somethingelse" 1111 else i) mymap 重命名为map,因为mymap与标准库函数map重叠。

如果您想使用类似地图的函数中的键值对,可以编写自己的地图函数:

map: (a -> b) -> [a] -> [b]

但是,您似乎要做的就是替换键import DA.Next.Map as M data OneElement = OneElement with t : Text i : Int deriving (Eq, Show) mapEntries : MapKey k => ((k, v) -> w) -> Map k v -> Map k w mapEntries f = M.fromList . map (\e -> (e._1, f e)) . M.toList mymap : Map Text OneElement = M.fromList [("0001", OneElement "one" 1), ("0002", OneElement "two" 2), ("0003", OneElement "three" 3), ("0004", OneElement "four" 4)] result = mapEntries (\(k, v) -> if k == "0001" then OneElement "somethingelse" 1111 else v) mymap 上的元素。为此,您在"0001"中有insert function

DA.Next.Map