我无法理解如何在Elixir中使用索引进行迭代。
例如,我有来自java的这个片段,我想把它翻译成Elixir:
for(int i = 1; i < list.size(); i++) {
list.order = i;
}
让我们说list
是Elixir的地图列表。我无法理解如何以Elixir方式执行此操作或仅使用某个索引变量进行迭代。
虽然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
使用不允许数据变异的语言时,它不像迭代集合和设置值那么简单。相反,您需要使用包含字段集的新对象创建新集合。
在Elixir中,你可以用foldl
做到这一点:
List.foldl(
list,
(1, map),
fn(l, (i, map)) -> (i+1, Map.update(map, :some_key, $(i)))
)