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]))