如果我有这样的原子列表
[:slug, :title]
如何为列表中的原子赋值,如元组
[{:slug, "some"}, {:title, "title"}]
有可能吗?
谢谢!
答案 0 :(得分:4)
您必须遍历列表才能查找和更新值。以下是for
:
defmodule A do
def assoc(xs, key, value) do
for x <- xs, do: if(x == key, do: {x, value}, else: x)
end
end
[:slug, :title]
|> A.assoc(:slug, "some")
|> A.assoc(:title, "title")
|> IO.inspect
输出:
[slug: "some", title: "title"]
请注意,[slug: "some", title: "title"]
与[{:slug, "some"}, {:title, "title"}]
相同。 Elixir打印一个元组列表,其中第一个元素是这样的原子。
iex(1)> [slug: "some", title: "title"] == [{:slug, "some"}, {:title, "title"}]
true
答案 1 :(得分:3)
使用Enum.zip/2
?
Enum.zip ~w|slug title|a, ~w|some title|
#⇒ [slug: "some", title: "title"]