如何遍历Elixir中的地图列表?

问题描述 投票:1回答:2

我无法理解如何在Elixir中使用索引进行迭代。

例如,我有来自java的这个片段,我想把它翻译成Elixir:

for(int i = 1; i < list.size(); i++) {
   list.order = i;
}

让我们说list是Elixir的地图列表。我无法理解如何以Elixir方式执行此操作或仅使用某个索引变量进行迭代。

elixir
2个回答
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

3
投票

使用不允许数据变异的语言时,它不像迭代集合和设置值那么简单。相反,您需要使用包含字段集的新对象创建新集合。

在Elixir中,你可以用foldl做到这一点:

List.foldl(
  list, 
  (1, map), 
  fn(l, (i, map)) -> (i+1, Map.update(map, :some_key, $(i)))
)
© www.soinside.com 2019 - 2024. All rights reserved.