常见高阶函数
[TOC]
函数 | 作用 | 返回类型 |
---|---|---|
map | 对集合中每个元素应用函数 | 新集合 |
reduce | 将集合归约为一个值 | 单一值 |
filter | 过滤集合中符合条件的元素 | 新集合 |
forEach | 对每个元素执行操作,不返回新集合 | 无 |
zip | 按索引组合多个集合 | 新集合 |
sort | 对集合排序 | 原集合(排序后) |
every | 检查是否所有元素满足条件 | 布尔值 |
some | 检查是否有任意元素满足条件 | 布尔值 |
find | 找到第一个满足条件的元素 | 单一元素或 nil |
map
作用: 对集合中的每个元素应用一个函数,返回一个新集合。 使用场景:
- 数据转换(如单位换算、格式化、取属性)。 例子: 将一个列表中的数字平方:
function map(func, tbl)
local new_tbl = {}
for i, v in ipairs(tbl) do
new_tbl[i] = func(v)
end
return new_tbl
end
local nums = {1, 2, 3}
local squares = map(function(x) return x * x end, nums)
print(table.concat(squares, ", ")) -- 输出:1, 4, 9
reduce
作用: 通过一个累积函数将集合中的所有元素归约为一个值。 使用场景:
- 聚合操作(如求和、求积、统计)。 例子: 对一个列表求和:
function reduce(func, tbl, init)
local acc = init
for _, v in ipairs(tbl) do
acc = func(acc, v)
end
return acc
end
local nums = {1, 2, 3, 4}
local sum = reduce(function(acc, x) return acc + x end, nums, 0)
print(sum) -- 输出:10
filter
作用: 根据一个判定函数过滤集合中的元素,返回符合条件的新集合。 使用场景:
- 筛选特定数据(如保留偶数、过滤负数)。 例子: 筛选列表中的偶数:
function filter(func, tbl)
local new_tbl = {}
for _, v in ipairs(tbl) do
if func(v) then
table.insert(new_tbl, v)
end
end
return new_tbl
end
local nums = {1, 2, 3, 4, 5, 6}
local evens = filter(function(x) return x % 2 == 0 end, nums)
print(table.concat(evens, ", ")) -- 输出:2, 4, 6
forEach
作用: 对集合中的每个元素执行一次指定操作,不返回新集合。 使用场景:
- 遍历集合,执行副作用操作(如打印日志、修改状态)。 例子: 打印列表中的每个元素:
function forEach(func, tbl)
for _, v in ipairs(tbl) do
func(v)
end
end
local nums = {1, 2, 3, 4}
forEach(function(x) print(x) end, nums)
-- 输出:1 2 3 4
zip
作用: 将两个或多个集合中的元素按索引位置组合成新的集合。 使用场景:
- 合并多组数据。 例子: 将两个列表对应位置的元素组合成键值对:
function zip(tbl1, tbl2)
local new_tbl = {}
for i = 1, math.min(#tbl1, #tbl2) do
table.insert(new_tbl, {tbl1[i], tbl2[i]})
end
return new_tbl
end
local keys = {"a", "b", "c"}
local values = {1, 2, 3}
local zipped = zip(keys, values)
for _, pair in ipairs(zipped) do
print(pair[1], pair[2]) -- 输出:a 1 b 2 c 3
end
sort
作用: 根据提供的比较函数对集合排序。 使用场景:
- 数据排序(如从小到大、按属性排序)。 例子: 对一个列表按从大到小排序:
function sort(tbl, compare)
table.sort(tbl, compare)
end
local nums = {5, 3, 8, 1}
sort(nums, function(a, b) return a > b end)
print(table.concat(nums, ", ")) -- 输出:8, 5, 3, 1
every
作用: 判断集合中的所有元素是否都满足某个条件。 使用场景:
- 验证集合是否符合某些标准。 例子: 检查一个列表是否全为正数:
function every(func, tbl)
for _, v in ipairs(tbl) do
if not func(v) then
return false
end
end
return true
end
local nums = {1, 2, 3, 4}
local allPositive = every(function(x) return x > 0 end, nums)
print(allPositive) -- 输出:true
some
作用: 判断集合中是否有任意元素满足某个条件。 使用场景:
- 检查集合是否存在符合条件的元素。 例子: 检查一个列表是否包含偶数:
function some(func, tbl)
for _, v in ipairs(tbl) do
if func(v) then
return true
end
end
return false
end
local nums = {1, 3, 5, 6}
local hasEven = some(function(x) return x % 2 == 0 end, nums)
print(hasEven) -- 输出:true
find
作用: 返回集合中第一个满足条件的元素。 使用场景:
- 查找符合条件的第一个元素。 例子: 查找列表中第一个偶数
function find(func, tbl)
for _, v in ipairs(tbl) do
if func(v) then
return v
end
end
return nil
end
local nums = {1, 3, 5, 6}
local firstEven = find(function(x) return x % 2 == 0 end, nums)
print(firstEven) -- 输出:6
原文:
https://lizijie.github.io/2025/01/29/%E5%B8%B8%E8%A7%81%E9%AB%98%E9%98%B6%E5%87%BD%E6%95%B0.html
作者github:
https://github.com/lizijie
</b>