使用Enum.map时在struct内设置值

时间:2017-01-12 17:09:46

标签: elixir

让我们假设我有这样的结构:

results = %{page: page_numer, period: period, result: [%Entry{}, %Entry{}]}

我想在result.result中的每个%Entry {}附加一些数据,就像它一样:

result.result
|> Enum.map(fn entry -> 
   entry.page = results[:page]
   entry.period = results[:period]
 end)

有可能吗?

2 个答案:

答案 0 :(得分:5)

您可以使用地图更新语法(假设:page结构中包含:periodEntry字段):

new_result = result.result
|> Enum.map(fn entry ->
  %{entry | page: results[:page], period: results[:period]}
end)

答案 1 :(得分:3)

最简单的方法是使用Kernel.struct/2函数(或在未知密钥上引发的更安全的替代struct!

result.result
|> Enum.map(&struct!(&1, page: results[:page], period: results[:period]))