Elixir-仅替换特定键值的映射

Elixir-仅替换特定键值的映射,elixir,Elixir,我有一个地图长生不老药列表,我想在其中替换一些值 map=[ %{id:1,用户:[%{m_值:2,n_值:2}]}, %{id:2,用户:[%{m_值:4,n_值:5}]}, %{id:3,用户:[%{m_值:3,n_值:4}]} ] 在这个映射中,我想单独替换m_值和n_值的所有值 例子 我想把所有的m_值乘以2,把所有的n_值乘以3 因此,我的最终输出将是: map=[ %{id:1,用户:[%{m_值:4,n_值:6}]}, %{id:2,用户:[%{m_值:8,n_值:15}]},

我有一个地图长生不老药列表,我想在其中替换一些值

map=[
%{id:1,用户:[%{m_值:2,n_值:2}]},
%{id:2,用户:[%{m_值:4,n_值:5}]},
%{id:3,用户:[%{m_值:3,n_值:4}]}
]
在这个映射中,我想单独替换
m_值
n_值
的所有值

例子 我想把所有的
m_值
乘以2,把所有的n_值乘以3

因此,我的最终输出将是:

map=[
%{id:1,用户:[%{m_值:4,n_值:6}]},
%{id:2,用户:[%{m_值:8,n_值:15}]},
%{id:3,用户:[%{m_值:6,n_值:12}]}
]

您对如何实现这一目标有何建议?

我假设您的有效地图如下所示:

map=[
%{id:1,用户:[%{m_值:2,n_值:2}]},
%{id:2,用户:[%{m_值:4,n_值:5}]},
%{id:3,用户:[%{m_值:6,n_值:12}]}
]
请注意,这是地图列表

然后,您可以在遍历列表中的元素时尝试:

Enum.map(
地图,
fn el->
埃尔
|>更新中的值([:users,Access.all(),:m_value],fn val->val*2 end)
|>更新中的值([:users,Access.all(),:n_value],fn val->val*3 end)
结束
)

希望有帮助

One无法取代Elixir中所有内容的任何内容(有一些非常罕见的限制,如流程字典,但这肯定超出了本文的范围。)

长生不老药中的一切都是永恒不变的。任何看起来像“更新”映射的代码都只会生成一个新映射

我们可以理解:


%{用户的代码>:[%{myValue:mv值,nyValue:nv}[} ]=M StimeNo:我会考虑在<代码> Update中的“更新”在中是一个非常令人困惑的假名,因为它不更新任何东西,它以方便的方式产生一个具有修改内容的新对象。而且,
&&1*2
&&1*3
看起来比匿名函数更华丽、更短:)是的,我同意所有这些。我不确定在这种情况下,中的
update\u的“非更新”方面有多少是一个问题,但我同意应该对此进行解释,以使请求者意识到这一点。为了让代码更容易理解,我特意决定不使用capture操作符(我假设了请求者的经验水平)。就您的解决方案而言,尽管@mudasobwa-我可以请您在
Enum.map
上扩展您对
for
的选择吗?这对性能有影响吗,还是个人选择?提前谢谢!正如Jonas Dellinger在对我的回答的评论中所指出的那样,当涉及到就地过滤、嵌套枚举等时,理解要灵活得多。根据更严格的规则进行相应修改更容易,而且更简洁:)我明白了,谢谢@mudasobwa的回答。我会尝试更多地运用理解力,看看它更适合哪里。非常感谢你的评论!这仅在
用户中只有一个元素时有效。对于列表实现,需要另一个嵌套的。@JonasDellinger实际上,按原样使用这个答案有很多限制。