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实际上,按原样使用这个答案有很多限制。