尝试替换 map 中的元素,但不确定如何完成。不确定如何访问键或值。
尝试了下面的代码,但它提示键或值无法识别。
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 中的键/值。
有人可以帮忙吗?谢谢。
最佳答案
DA.Next.Map.Map
的 fmap
实现仅映射值,而不映射键、值对:fmap : (v -> w) -> 映射 k v -> 映射 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 的函数中获得键值对,您可以编写自己的 map 函数:
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
中。
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
关于dictionary - 如何在 DAML 中访问映射键/值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56333855/