如何使用Enum.map以与Elixir中的其他元素稍微不同的方式修改集合的第一个元素?

时间:2018-05-03 08:50:23

标签: elixir

我有一个“struct”列表。我正在使用Enum.map(...)来修改它们。我想要的是以稍微不同的方式修改第一个元素 ,其余的应该以标准方式修改最好的方法是什么?

我尝试用一​​系列数字压缩我的结构列表,对于这么简单的任务看起来异常复杂。

3 个答案:

答案 0 :(得分:5)

假设您分别有list和两个函数modify1modify2,您可以将列表拆分为headtail,然后应用转换和将列表粘贴回来:

with [h | t] <- list,
     h <- modify1.(h),
     t <- Enum.map(& modify2/1),
 do: [h | t]

另一种选择是通过调用Enum.with_index/1来散布对地图的呼叫:

list
|> Enum.with_index()
|> Enum.map(fn
     {h, 0} -> modify1.(h)
     {t, _} -> modify2.(t)
   end)

答案 1 :(得分:1)

您可以使用Enum.with_index,然后在Enum.map上调用index匹配进行必要的修改。像

struct_list
|> Enum.with_index()
|> Enum.map(fn 
    {data, 0} ->
       # first struct modification code here
       modify_first(data)
    {data, _index} ->
       # standard modification
       modify(data)
end)

答案 2 :(得分:1)

在列表上应用Enum.with_index(...),然后应用Enum.map(...)进行修改。