假设我有一张看起来像这样的地图
一个组织具有一组属性,而这些属性具有一组“ access_tokens”
organization = %{
name: "Org",
properties: [
%{
name: "prop1",
access_tokens: [%{id: "at-1", name: "one-1"}, %{id: "at-2", name: "one-2"}]
},
%{
name: "prop2",
access_tokens: [%{id: "at-3", name: "two-1"}, %{id: "at-4", name: "two-2"}]
}
]
}
Run Code Online (Sandbox Code Playgroud)
现在,我有了此映射,对于一个特定的访问令牌,此映射的ID与2nd属性的访问令牌之一匹配:
access_token = %{id: "at-3", name: "new name"}
Run Code Online (Sandbox Code Playgroud)
迭代organization%{}使用新的访问令牌更新地图的最佳方法是什么?我要做的是找到基于进行匹配的访问令牌,id并将其替换为具有新名称的新令牌。
我有一些绕行的方式来做到这一点,但是在Elixir中这样做是一种干净的方式。
你并不需要迭代,只使用Access,Access.filter/1以及Access.all/0:
put_in(
organization,
[:properties,
Access.all(),
:access_tokens,
Access.filter(&match?(%{id: "at-3"}, &1)),
:name],
"new_name")
Run Code Online (Sandbox Code Playgroud)
我一直想知道,这门语言中最强大的功能之一是如何被大大低估了。