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

2 elixir

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

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

Ale*_*kin 5

假设你有一个list和两个功能modify1,并modify2分别,你可能会在列表分裂成headtail,应用您的转换和胶水列表回:

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

另一个选择是散布呼叫地图,呼叫Enum.with_index/1:

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