Enum.map_every偶数
Enum.map_every even number
Enum.map
可用于改变列表奇数元素的值:
iex(13)> [1,2,3,4,5,6] |> Enum.map_every(2, &(&1 + 100))
[101, 2, 103, 4, 105, 6]
然而,似乎需要偏移 1
才能对列表的偶数元素执行相同的操作。
有没有可以直接map_every
偶数的函数?
没有执行此操作的函数。
但是,可以通过移动数组并使用 Enum.map_every/3
用 2 行来实现
iex(1)> [head | tail] = [1,2,3,4,5,6]
[1, 2, 3, 4, 5, 6]
iex(2)> [head | Enum.map_every(2, tail, &(&1 + 100))]
[1, 102, 3, 104, 5, 106]
您还可以构建如下所示的函数。它将从提供的 nth
而不是第一个元素开始映射:
def map_every_alt(enumerable, nth, fun) when nth > 0 do
Enum.take(enumerable, nth - 1) ++
Enum.map_every(Enum.drop(enumerable, nth - 1), nth, fun)
end
虽然移动原始列表有效,但我真的不认为这是正确的方法。是否需要更新 even 个元素,这可以明确地完成:
require Integer
[1,2,3,4,5,6]
|> Enum.map_every(1, &(if Integer.is_even(&1), do: &1 + 100, else: &1))
#⇒ [1, 102, 3, 104, 5, 106]
这同样适用于任何繁琐的条件:只需调用 Enum.map_every/3
并将 nth
参数设置为 1
并在 reducer 中执行额外检查,返回修改后的值,或者原来的。
条件应应用于 索引 ,使用 Enum.with_index/1
包装输入
[1,2,3,4,5,6]
|> Enum.with_index
|> Enum.map_every(1, fn {e, idx} ->
if Integer.is_even(idx), do: e + 100, else: e
end)
Enum.map
可用于改变列表奇数元素的值:
iex(13)> [1,2,3,4,5,6] |> Enum.map_every(2, &(&1 + 100))
[101, 2, 103, 4, 105, 6]
然而,似乎需要偏移 1
才能对列表的偶数元素执行相同的操作。
有没有可以直接map_every
偶数的函数?
没有执行此操作的函数。
但是,可以通过移动数组并使用 Enum.map_every/3
iex(1)> [head | tail] = [1,2,3,4,5,6]
[1, 2, 3, 4, 5, 6]
iex(2)> [head | Enum.map_every(2, tail, &(&1 + 100))]
[1, 102, 3, 104, 5, 106]
您还可以构建如下所示的函数。它将从提供的 nth
而不是第一个元素开始映射:
def map_every_alt(enumerable, nth, fun) when nth > 0 do
Enum.take(enumerable, nth - 1) ++
Enum.map_every(Enum.drop(enumerable, nth - 1), nth, fun)
end
虽然移动原始列表有效,但我真的不认为这是正确的方法。是否需要更新 even 个元素,这可以明确地完成:
require Integer
[1,2,3,4,5,6]
|> Enum.map_every(1, &(if Integer.is_even(&1), do: &1 + 100, else: &1))
#⇒ [1, 102, 3, 104, 5, 106]
这同样适用于任何繁琐的条件:只需调用 Enum.map_every/3
并将 nth
参数设置为 1
并在 reducer 中执行额外检查,返回修改后的值,或者原来的。
条件应应用于 索引 ,使用 Enum.with_index/1
[1,2,3,4,5,6]
|> Enum.with_index
|> Enum.map_every(1, fn {e, idx} ->
if Integer.is_even(idx), do: e + 100, else: e
end)