Elixir 语言 列表分组筛选过滤实践示例

Elixir阿木 发布于 26 天前 4 次阅读


摘要:Elixir 是一种用于构建可扩展和可靠应用程序的函数式编程语言,它运行在 Erlang 虚拟机上。在 Elixir 中,列表是处理数据的基本结构之一。本文将围绕 Elixir 语言中的列表分组、筛选与过滤进行实践示例,帮助读者更好地理解和应用这些功能。

一、

在 Elixir 中,列表是一个非常重要的数据结构,它允许我们以有序的方式存储和操作数据。在实际应用中,我们经常需要对列表进行分组、筛选和过滤等操作。本文将通过一系列实践示例,展示如何在 Elixir 中实现这些功能。

二、列表分组

列表分组是指将列表中的元素按照一定的规则进行分类。在 Elixir 中,我们可以使用 `Enum.group_by/3` 函数来实现列表分组。

elixir

defmodule ListGroupExample do


def group_by_age(people) do


Enum.group_by(people, &(&1.age))


end


end

people = [


%{:name => "Alice", :age => 25},


%{:name => "Bob", :age => 30},


%{:name => "Charlie", :age => 25},


%{:name => "David", :age => 35}


]

grouped_by_age = ListGroupExample.group_by_age(people)


IO.inspect(grouped_by_age)


在上面的示例中,我们定义了一个 `ListGroupExample` 模块,其中包含一个 `group_by_age/1` 函数。该函数接收一个包含人员信息的列表,并使用 `Enum.group_by/3` 函数按照年龄进行分组。我们打印出分组后的结果。

三、列表筛选

列表筛选是指从列表中选出满足特定条件的元素。在 Elixir 中,我们可以使用 `Enum.filter/2` 函数来实现列表筛选。

elixir

defmodule ListFilterExample do


def filter_adults(people) do


Enum.filter(people, &(&1.age >= 18))


end


end

adults = ListFilterExample.filter_adults(people)


IO.inspect(adults)


在上面的示例中,我们定义了一个 `ListFilterExample` 模块,其中包含一个 `filter_adults/1` 函数。该函数接收一个包含人员信息的列表,并使用 `Enum.filter/2` 函数筛选出年龄大于等于 18 的成年人。我们打印出筛选后的结果。

四、列表过滤

列表过滤与列表筛选类似,也是从列表中选出满足特定条件的元素。但在 Elixir 中,`Enum.filter/2` 函数返回的是一个新的列表,而列表过滤通常是在原列表上进行操作。

elixir

defmodule ListFilterInPlaceExample do


def filter_in_place(people) do


Enum.filter(people, fn person ->


person.age >= 18


end)


end


end

people = [


%{:name => "Alice", :age => 25},


%{:name => "Bob", :age => 17},


%{:name => "Charlie", :age => 30}


]

ListFilterInPlaceExample.filter_in_place(people)


IO.inspect(people)


在上面的示例中,我们定义了一个 `ListFilterInPlaceExample` 模块,其中包含一个 `filter_in_place/1` 函数。该函数接收一个包含人员信息的列表,并使用 `Enum.filter/2` 函数在原列表上进行过滤操作。我们打印出过滤后的原列表。

五、列表映射

在 Elixir 中,列表映射是指将列表中的每个元素通过一个函数转换成新的元素。我们可以使用 `Enum.map/2` 函数来实现列表映射。

elixir

defmodule ListMapExample do


def map_names(people) do


Enum.map(people, &(&1.name))


end


end

names = ListMapExample.map_names(people)


IO.inspect(names)


在上面的示例中,我们定义了一个 `ListMapExample` 模块,其中包含一个 `map_names/1` 函数。该函数接收一个包含人员信息的列表,并使用 `Enum.map/2` 函数将列表中的每个元素映射为其姓名。我们打印出映射后的结果。

六、总结

本文通过一系列实践示例,展示了如何在 Elixir 中进行列表分组、筛选和过滤操作。这些操作是 Elixir 编程中非常基础且常用的功能,熟练掌握它们将有助于我们更好地处理数据。

在 Elixir 中,`Enum` 模块提供了丰富的函数来帮助我们处理列表,如 `group_by/3`、`filter/2`、`filter/3`、`map/2` 等。通过这些函数,我们可以轻松地对列表进行分组、筛选、过滤和映射等操作。

希望本文能帮助读者更好地理解 Elixir 中的列表操作,并在实际项目中灵活运用。