在DAML中,如何查找和替换列表中的元素

时间:2019-05-22 07:36:14

标签: daml

如果我有一个数据列表[Item],那么在其中定位和更改元素的最佳方法是什么。

aList : [Item]
searchName : Text
newPrice : Decimal


- I can find the element using 
let a : Optional Int = findIndex (\a -> a.name == searchName) aList

-but this doesn't change the value of the List
let (aList !! fromSome a).price = newPrice

data Item = Item 
  with
    name : Text
    price : Decimal
  deriving (Eq, Show)

1 个答案:

答案 0 :(得分:1)

DAML中的值是不可变的-这意味着一旦创建了列表,就无法更新其中的任何值。但是,有很多辅助功能可用于创建新列表,就像旧列表一样,但有一些更改。例如:

let newList = map (\a -> if a.name == searchName then a{price = newPrice} else a) aList

map函数采用列表中的每个元素并应用给定的函数。我们传递的函数会更改名称正确的price,并返回所有其他不变的名称。请注意,与您的版本不同,这会用searchName而不是仅更改第一个项目-我假设这是可以的(但是,如果不行,请查看类似partition的函数来首先分割列表)。 / p>