如何在 DAML 中访问地图 Key/value?

How to access Map Key/value in 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 中访问 key/value。

有人可以帮忙吗?谢谢。

DA.Next.Map.Mapfmap 实现仅映射值,而不映射键值对: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] 重叠。

如果您想在 map-like 函数中获取键值对,您可以编写自己的映射函数:

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" 处的元素。为此,您在 DA.Next.Map.

中有 insert function
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 = insert "0001" (OneElement "somethingelse" 1111) mymap