列表到Elixir中的关键字列表

时间:2015-09-16 19:59:35

标签: erlang elixir phoenix-framework

我有一个使用Ecto引入的结果列表。我想最终得到一个关键字列表,然后我可以用它填充凤凰城内的data(),但我不确定如何将此列表转换为<select>

["1": "Author #1", "2": "Author #2"]

2 个答案:

答案 0 :(得分:5)

关键字列表需要原子作为键。好消息是,您不需要提供关键字列表来提供select。这有两种方法:

  1. 直接在查询中执行:

    authors = Repo.all from a in Author, select: {a.name, a.id}
    
  2. 在数据上执行:

    authors = Repo.all Author
    Enum.map(authors, fn a -> {a.name, a.id} end)
    
  3. 第一个优点是您只需从表中加载所需的数据。

答案 1 :(得分:3)

使用Enum.map

选择作者姓名
1..Enum.count(authors ) |> Enum.map(fn x-> to_string(x) end) |> Enum.zip(authorNames)

然后使用Enum.zip设置键值对

[{"1", "Author #1"}, {"2", "Author #2"}]

这会产生类似的东西:

1..Enum.count(authors ) |> Enum.map(fn x-> x |> to_string |> String.to_atom end) |> Enum.zip(authorNames)

如果你想让它成为一个真正的关键字列表,你需要第一个元素是一个原子,因为关键字列表只使用原子作为键

["1": "Author #1", "2": "Author #2"]

将产生

{!! link_to_route('projects.doc.emailPdf', 'Email PDF', array($project->id, $project->doc->id), array('class' => 'btn btn-info email-sbt')) !!}

但是我总是听说要仔细管理原子的数量并将大量的弦转换成原子并不是最佳做法。除非您知道您的查询将返回多少作者,否则在将键编号转换为原子时可能需要小心。