我有一个Elixir地图列表,我想在其中替换一些值
map = [
%{id: 1, users: [%{m_value: 2, n_value: 2}]},
%{id: 2, users: [%{m_value: 4, n_value: 5}]},
%{id: 3, users: [%{m_value: 3, n_value: 4}]}
]
Run Code Online (Sandbox Code Playgroud)
在这张地图中,我想要替换所有的值m_value并且n_value单独使用.
我想将所有乘以m_value2和所有n_value乘以3
所以我的最终输出将是:
map = [
%{id: 1, users: [%{m_value: 4, n_value: 6}]},
%{id: 2, users: [%{m_value: 8, n_value: 15}]},
%{id: 3, users: [%{m_value: 6, n_value: 12}]}
]
Run Code Online (Sandbox Code Playgroud)
你对如何实现这个有什么建议吗?
一个无法替代的药剂中的一切东西(有一些非常罕见的限制,比如进程字典,但是这绝对是超出范围在这里.)
Elixir中的一切都是不可改变的.任何看起来像"更新"地图的代码,只会生成一个新地图.
一个人可能会Kernel.SpecialForms.for/1理解:
for %{users: [%{m_value: mv, n_value: nv}]} = m <- map,
do: %{ m | users: [%{m_value: mv * 2, n_value: nv * 3}]}
#? [
# %{id: 1, users: [%{m_value: 4, n_value: 6}]},
# %{id: 2, users: [%{m_value: 8, n_value: 15}]},
# %{id: 3, users: [%{m_value: 6, n_value: 12}]}]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
576 次 |
| 最近记录: |