我有一个“struct”列表。我正在使用Enum.map(...)
来修改它们。我想要的是以稍微不同的方式修改第一个元素 ,其余的应该以标准方式修改。最好的方法是什么?
我尝试用一系列数字压缩我的结构列表,对于这么简单的任务看起来异常复杂。
答案 0 :(得分:5)
假设您分别有list
和两个函数modify1
和modify2
,您可以将列表拆分为head
和tail
,然后应用转换和将列表粘贴回来:
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(...)
进行修改。