• 主页

  • 投资

  • IT

    🔥
  • 设计

  • 销售

关闭

返回栏目

关闭

返回Lua栏目

33 - 高阶函数 - 常见高阶函数 - map、filter、reduce

作者:

贺及楼

成为作者

更新日期:2025-02-27 21:48:01

Lua 《高阶函数 - 常见高阶函数 - map、filter、reduce》

在 Lua 编程中,高阶函数是一种强大的编程概念,它允许函数接受其他函数作为参数,或者返回一个函数。其中,mapfilterreduce 是三个非常常见且实用的高阶函数,它们能帮助我们更高效地处理数据集合。接下来,我们将深入探讨这三个高阶函数。

1. map 函数

功能介绍

map 函数的主要作用是对集合中的每个元素应用一个给定的函数,并返回一个包含所有处理结果的新集合。简单来说,就是对集合中的每个元素进行相同的转换操作。

代码实现

  1. -- 定义 map 函数
  2. function map(func, list)
  3. local result = {}
  4. for _, value in ipairs(list) do
  5. table.insert(result, func(value))
  6. end
  7. return result
  8. end
  9. -- 示例函数:将元素乘以 2
  10. function double(x)
  11. return x * 2
  12. end
  13. -- 测试数据
  14. local numbers = {1, 2, 3, 4, 5}
  15. -- 使用 map 函数
  16. local doubled_numbers = map(double, numbers)
  17. -- 输出结果
  18. for _, num in ipairs(doubled_numbers) do
  19. print(num)
  20. end

代码解释

  • 首先,我们定义了 map 函数,它接受两个参数:一个函数 func 和一个列表 list
  • map 函数内部,我们创建了一个空表 result 用于存储处理结果。
  • 然后,使用 ipairs 遍历列表 list 中的每个元素,将每个元素传递给 func 函数进行处理,并将处理结果插入到 result 表中。
  • 最后,返回 result 表。

2. filter 函数

功能介绍

filter 函数用于根据给定的条件过滤集合中的元素,返回一个只包含满足条件元素的新集合。

代码实现

  1. -- 定义 filter 函数
  2. function filter(func, list)
  3. local result = {}
  4. for _, value in ipairs(list) do
  5. if func(value) then
  6. table.insert(result, value)
  7. end
  8. end
  9. return result
  10. end
  11. -- 示例函数:判断元素是否为偶数
  12. function is_even(x)
  13. return x % 2 == 0
  14. end
  15. -- 测试数据
  16. local numbers = {1, 2, 3, 4, 5}
  17. -- 使用 filter 函数
  18. local even_numbers = filter(is_even, numbers)
  19. -- 输出结果
  20. for _, num in ipairs(even_numbers) do
  21. print(num)
  22. end

代码解释

  • 我们定义了 filter 函数,它接受一个函数 func 和一个列表 list 作为参数。
  • filter 函数内部,同样创建了一个空表 result 用于存储满足条件的元素。
  • 遍历列表 list 中的每个元素,将元素传递给 func 函数进行判断,如果返回 true,则将该元素插入到 result 表中。
  • 最后返回 result 表。

3. reduce 函数

功能介绍

reduce 函数用于将集合中的元素依次合并为一个单一的值。它接受一个二元函数和一个初始值作为参数,从左到右依次对集合中的元素应用该二元函数。

代码实现

  1. -- 定义 reduce 函数
  2. function reduce(func, list, initial)
  3. local accumulator = initial
  4. for _, value in ipairs(list) do
  5. accumulator = func(accumulator, value)
  6. end
  7. return accumulator
  8. end
  9. -- 示例函数:求和
  10. function add(x, y)
  11. return x + y
  12. end
  13. -- 测试数据
  14. local numbers = {1, 2, 3, 4, 5}
  15. -- 使用 reduce 函数
  16. local sum = reduce(add, numbers, 0)
  17. -- 输出结果
  18. print(sum)

代码解释

  • 定义 reduce 函数,它接受一个二元函数 func、一个列表 list 和一个初始值 initial 作为参数。
  • 将初始值赋值给 accumulator 变量。
  • 遍历列表 list 中的每个元素,将 accumulator 和当前元素传递给 func 函数进行计算,并将结果更新到 accumulator 中。
  • 最后返回 accumulator

总结

函数名 功能 示例用途
map 对集合中的每个元素应用一个函数,返回处理结果的新集合 将列表中的每个元素乘以 2
filter 根据条件过滤集合中的元素,返回满足条件的元素组成的新集合 筛选出列表中的偶数
reduce 将集合中的元素依次合并为一个单一的值 计算列表中所有元素的和

通过使用 mapfilterreduce 这三个高阶函数,我们可以更简洁、高效地处理数据集合,提高代码的可读性和可维护性。在实际编程中,合理运用这些高阶函数能让我们的代码更加优雅。