Как изменить первый элемент коллекции немного иначе, чем в Elixir, используя Enum.map? - PullRequest
0 голосов
/ 03 мая 2018

У меня есть список "struct". Я использую Enum.map(...), чтобы изменить их. То, что я хочу, это изменить 1-й элемент только немного другим способом, а остальные должны быть изменены стандартным способом. Какой лучший способ сделать это?

Я попытался сжать свой список структур с диапазоном чисел, и для такой простой задачи это выглядело необычно сложно.

Ответы [ 3 ]

0 голосов
/ 03 мая 2018

Вы можете использовать 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)
0 голосов
/ 03 мая 2018

Применить Enum.with_index(...) над списком и после применения Enum.map(...), чтобы изменить их.

0 голосов
/ 03 мая 2018

Предполагая, что у вас есть 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)
...