假设我有一个结构体列表id,其键之一为:
users = [
%User{id: 1, attempts: 5},
%User{id: 2, attempts: 12},
%User{id: 3, attempts: 2}
]
Run Code Online (Sandbox Code Playgroud)
什么是将尝试次数更新为99个用户的最佳方法(最灵丹妙药的方法),id == 2以获取新的用户列表:
updated_users = [
%User{id: 1, attempts: 5},
%User{id: 2, attempts: 99},
%User{id: 3, attempts: 2}
]
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助!
Enum.map(users, fn
%User{id: 2} = user -> %User{user | attempts: 99}
user -> user
end)
Run Code Online (Sandbox Code Playgroud)
您可以将其封装到某个模块中,并给它一个好名字:)
可以说,最灵丹妙药的方法是使用Access行为和Kernel.put_in/3:
put_in users,\n [Access.filter(&match?(%User{id: 2}, &1)), \n Access.key(:attempts)],\n 99\n#\xe2\x87\x92 [\n# %User{attempts: 5, id: 1},\n# %User{attempts: 99, id: 2},\n# %User{attempts: 2, id: 3}\n#]\nRun Code Online (Sandbox Code Playgroud)\n\n通过更改过滤器功能,这可以轻松扩展以更新多个元素。
\n| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |