Elixir 使用Enum.map时在结构内部设置值

Elixir 使用Enum.map时在结构内部设置值,elixir,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) 有可能

假设我有这样的结构:

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)

有可能吗?

您可以使用地图更新语法(假设您在
条目
结构中有
:page
:period
字段):


您可以使用映射更新语法(假设在
条目
结构中有
:page
:period
字段):


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


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


这个答案中缺少了一个括号,但在添加它之后,它也起作用了!固定的。是的,@Dogbert提供的解决方案是一个更好的解决方案。答案中缺少一个括号,但添加它后,它也可以工作!固定的。是的,@Dogbert提供的解决方案更好。
new_result = result.result
|> Enum.map(fn entry ->
  %{entry | page: results[:page], period: results[:period]}
end)
result.result
|> Enum.map(&struct!(&1, page: results[:page], period: results[:period]))