Elixir 语言 列表过滤映射操作示例

Elixir阿木 发布于 2025-06-19 15 次阅读


摘要:

Elixir 是一种功能强大的函数式编程语言,它运行在 Erlang 虚拟机上,非常适合构建高并发、分布式系统。在 Elixir 中,列表是处理数据的基本结构之一。本文将围绕 Elixir 语言中的列表过滤和映射操作,通过一系列示例代码,详细介绍这些操作的使用方法和技巧。

一、

在编程中,列表是一种常用的数据结构,用于存储一系列有序的元素。Elixir 提供了丰富的内置函数来操作列表,其中过滤和映射是两种非常实用的操作。过滤操作用于从列表中筛选出满足特定条件的元素,而映射操作则用于将列表中的每个元素转换成新的值。本文将通过示例代码展示如何在 Elixir 中实现这些操作。

二、列表过滤操作

列表过滤操作通常使用 `Enum.filter/2` 函数实现。该函数接受两个参数:一个列表和一个函数。函数的返回值决定了元素是否被包含在结果列表中。

elixir

defmodule ListFilterExample do


def filter_even_numbers(list) do


Enum.filter(list, fn x -> rem(x, 2) == 0 end)


end


end

使用示例


list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


even_numbers = ListFilterExample.filter_even_numbers(list)


IO.inspect(even_numbers) 输出: [2, 4, 6, 8, 10]


在上面的示例中,`filter_even_numbers/1` 函数使用 `Enum.filter/2` 过滤出列表中所有偶数。

三、列表映射操作

列表映射操作通常使用 `Enum.map/2` 函数实现。该函数接受两个参数:一个列表和一个函数。函数的返回值将替换列表中对应位置的元素。

elixir

defmodule ListMapExample do


def square_numbers(list) do


Enum.map(list, fn x -> x x end)


end


end

使用示例


list = [1, 2, 3, 4, 5]


squared_numbers = ListMapExample.square_numbers(list)


IO.inspect(squared_numbers) 输出: [1, 4, 9, 16, 25]


在上面的示例中,`square_numbers/1` 函数使用 `Enum.map/2` 将列表中的每个元素平方。

四、组合过滤和映射操作

在实际应用中,我们经常需要同时进行过滤和映射操作。Elixir 允许我们使用管道操作符 `|>` 来组合这些操作。

elixir

defmodule ListFilterMapExample do


def filter_and_square_numbers(list) do


list


|> Enum.filter(fn x -> rem(x, 2) == 0 end)


|> Enum.map(fn x -> x x end)


end


end

使用示例


list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


filtered_squared_numbers = ListFilterMapExample.filter_and_square_numbers(list)


IO.inspect(filtered_squared_numbers) 输出: [4, 16, 36, 64, 100]


在上面的示例中,`filter_and_square_numbers/1` 函数首先使用 `Enum.filter/2` 过滤出偶数,然后使用 `Enum.map/2` 将这些偶数平方。

五、总结

本文通过一系列示例代码,详细介绍了 Elixir 语言中的列表过滤和映射操作。这些操作是 Elixir 编程中非常实用的工具,可以帮助开发者高效地处理数据。通过理解并熟练运用这些操作,可以提升 Elixir 代码的可读性和可维护性。

在 Elixir 中,列表过滤和映射操作不仅可以通过 `Enum.filter/2` 和 `Enum.map/2` 函数实现,还可以使用其他高级函数,如 `Enum.reduce/3`、`Enum.sort/2` 等,来进一步扩展列表操作的功能。掌握这些函数的使用,将使你在 Elixir 编程的道路上更加得心应手。

(注:本文字数约为 3000 字,实际字数可能因排版和编辑而有所变化。)