我对Elixir编程很安静,并且严重分裂为两个元素元组.
给定一个整数列表,返回一个两元素元组.第一个元素是列表中的偶数列表.第二个是奇数列表.
Input : [ 1, 2, 3, 4, 5 ]
Output { [ 2, 4], [ 1, 3, 5 ] }
Run Code Online (Sandbox Code Playgroud)
我已达成识别奇数或偶数但不确定如何进行.
defmodule OddOrEven do
import Integer
def task(list) do
Enum.reduce(list, [], fn(x, acc) ->
case Integer.is_odd(x) do
:true -> # how do I get this odd value listed as a tuple element
:false -> # how do I get this even value listed as a tuple element
end
#IO.puts(x)
end
)
end
Run Code Online (Sandbox Code Playgroud)
Dog*_*ert 14
你可以使用Enum.partition/2:
iex(1)> require Integer
iex(2)> [1, 2, 3, 4, 5] |> Enum.partition(&Integer.is_even/1)
{[2, 4], [1, 3, 5]}
Run Code Online (Sandbox Code Playgroud)
如果你真的想使用Enum.reduce/2,你可以这样做:
iex(3)> {evens, odds} = [1, 2, 3, 4, 5] |> Enum.reduce({[], []}, fn n, {evens, odds} ->
...(3)> if Integer.is_even(n), do: {[n | evens], odds}, else: {evens, [n | odds]}
...(3)> end)
{[4, 2], [5, 3, 1]}
iex(4)> {Enum.reverse(evens), Enum.reverse(odds)}
{[2, 4], [1, 3, 5]}
Run Code Online (Sandbox Code Playgroud)