dictionary - 如何在 DAML 中访问映射键/值?

标签 dictionary daml

尝试替换 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.Mapfmap 实现仅映射值,而不映射键、值对: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 functionDA.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/

相关文章:

python - 查找字符串中出现次数最多的字符

dictionary - Clojure - 在最内层过滤嵌套映射

python - python中的 "for key in dict"是否总是以固定顺序迭代?

daml - 在 'date' 语句或 'create' 语句内使用 'exercise' 函数时出现问题

c - 如何进行百万级词典搜索**(非英语)**

android - 基于位置的服务应用

daml - 通过 Java 或 JavaScript 以外的语言使用 DAML Ledger API

node.js - 数字 Assets Node.js 绑定(bind) : syntax for expressing 'time' type variable

types - DAML 有对应的 Google 吗?