我无法理解如何在Elixir中使用索引进行迭代。
例如,我有来自java的这个片段,我想把它翻译成Elixir:
for(int i = 1; i < list.size(); i++) {
list.order = i;
}
让我们说list
是来自Elixir的地图列表。
我无法理解如何以Elixir方式执行此操作或仅使用某个索引变量进行迭代。
答案 0 :(得分:3)
使用不允许数据突变的语言时,它不像迭代集合和设置值那么简单。相反,您需要使用包含字段集的新对象创建新集合。
在Elixir中,您可以使用.transitionDuration(0)
:
foldl
答案 1 :(得分:2)
虽然Justin的答案完全有效,但惯用的Elixir解决方案是使用Enum.with_index/2
:
list = ~w|a b c d e|
list
|> Enum.with_index()
|> Enum.each(fn {e, idx} -> IO.puts "Elem: #{e}, Idx: #{idx}" end)
#⇒ Elem: a, Idx: 0
#⇒ Elem: b, Idx: 1
#⇒ Elem: c, Idx: 2
#⇒ Elem: d, Idx: 3
#⇒ Elem: e, Idx: 4
答案 2 :(得分:0)
或者使用for
理解
[debug] localized_titles %{attributes: [%{"en" => "The English Title of a Playlist"}, %{"fr" => "Le French Title of a Playlist"}]}
maps =
for title <- localized_titles,
_ = Logger.debug("title #{inspect(%{attributes: title})}"),
{k, v} <- title do
IO.puts "#{k} --> #{v}"
Repo.insert(%PlaylistTitle{language_id: k, localizedname: v, uuid: Ecto.UUID.generate(), playlist_id: playlist.id})
end
Logger.debug("maps #{inspect(%{attributes: maps})}")
{:ok, maps}