Elixir:将列表分为奇数和偶数元素作为元组中的两个项目 [英] Elixir: Split list into odd and even elements as two items in tuple

查看:138
本文介绍了Elixir:将列表分为奇数和偶数元素作为元组中的两个项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



给定一个整数列表,返回一个两元素元组。第一个元素是列表中的偶数列表。第二个是奇数列表。

 输入:[1,2,3,4,5] 
输出{[2,4],[1,3,5]}

我已经达到识别奇数甚至不确定如何继续。

  defmodule OddOrEven do 
import Integer

def task(list)do

Enum.reduce(list,[],fn(x,acc) - >
case Integer.is_odd(x)do
:true - >#如何将这个奇数值列为元组元素
:false - >#如何将这个偶数值列为元组元素
end
#IO.puts(x)
end

end


解决方案

您可以使用 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]}

如果你真的想使用 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]}


I am quiet new to Elixir programming and stuck badly at splitting into two elements tuple.

Given a list of integers, return a two element tuple. The first element is a list of the even numbers from the list. The second is a list of the odd numbers.

Input : [ 1, 2, 3, 4, 5 ]
Output  { [ 2, 4],  [ 1, 3, 5 ] }

I have reached to identify the odd or even but not sure how do I proceed.

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

解决方案

You can use 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]}

If you really want to use Enum.reduce/2, you can do this:

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]}

这篇关于Elixir:将列表分为奇数和偶数元素作为元组中的两个项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆