Dictionary 如何访问DAML中的映射键/值?

Dictionary 如何访问DAML中的映射键/值?,dictionary,daml,Dictionary,Daml,尝试替换映射中的元素,但不确定如何完成。不确定如何访问键或值 尝试了以下代码,但它抱怨无法识别键或值 让映射:映射文本OneElement=M.fromList(((“0001”,OneElement“一”1)::(“0002”,OneElement“二”2::(“0003”,OneElement“三”3)::(“0004”,OneElement“四”4)::[])) 让result=fmap(\i->if i.key==“0001”然后(OneElement“somethingelse”111

尝试替换映射中的元素,但不确定如何完成。不确定如何访问键或值

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

让映射:映射文本OneElement=M.fromList(((“0001”,OneElement“一”1)::(“0002”,OneElement“二”2::(“0003”,OneElement“三”3)::(“0004”,OneElement“四”4)::[]))
让result=fmap(\i->if i.key==“0001”然后(OneElement“somethingelse”1111)else i.value)映射
还有如何访问TextMap中的键/值


有人能帮忙吗?谢谢

针对
DA.Next.Map.Map的
fmap
实现只映射值,而不是键、值对:
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”
处的元素。为此,您需要在
DA.Next.Map
中使用

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