访问列表中的原子并设置值

时间:2018-03-13 09:42:29

标签: elixir

如果我有这样的原子列表

[:slug, :title]

如何为列表中的原子赋值,如元组

[{:slug, "some"}, {:title, "title"}]

有可能吗?

谢谢!

2 个答案:

答案 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"]