Lumesh 列表模块使用文档
模块概述
Lumesh 的列表模块提供了丰富的列表操作功能,分为以下几个功能组:
获取元素类函数 (Get)
list.first
功能: 获取列表的第一个元素
参数: 列表
返回值: 第一个元素或错误(空列表时)
示例:
list.first([1, 2, 3]) -- 返回1
list.last
功能: 获取列表的最后一个元素
参数: 列表
返回值: 最后一个元素或错误(空列表时)
示例:
list.last([1, 2, 3]) -- 返回3
list.nth
功能: 获取列表中指定位置的元素
参数:
- 索引(整数,支持负数表示从末尾开始)
- 列表
返回值: 指定位置的元素或错误(索引越界时)
示例:
list.nth(2, [1, 2, 3]) -- 返回2
list.nth(-1, [1, 2, 3]) -- 返回3
list.take
功能: 获取列表前n个元素
参数:
- 数量n(整数)
- 列表
返回值: 新列表
示例:
list.take(2, [1, 2, 3, 4]) -- 返回[1, 2]
list.drop
功能: 获取列表跳过前n个元素后的部分
参数:
- 数量n(整数)
- 列表
返回值: 新列表
示例:
list.drop(2, [1, 2, 3, 4]) -- 返回[3, 4]
修改列表类函数 (Modify)
list.append
功能: 在列表末尾添加元素
参数:
- 要添加的元素
- 列表
返回值: 新列表
示例:
list.append(4, [1, 2, 3]) -- 返回[1, 2, 3, 4]
list.prepend
功能: 在列表开头添加元素
参数:
- 要添加的元素
- 列表
返回值: 新列表
示例:
list.prepend(0, [1, 2, 3]) -- 返回[0, 1, 2, 3]
list.sort
- 功能: 排序列表
- 参数:
- 可选: 一个排序函数(接受两个元素返回比较结果)
- 或可选: 一个字段列表
- 或可选: 多个字段参数
- 列表 或 字符串(将被自动转换为列表)
- 返回值: 排序后的新列表
- 示例:
list.sort([3, 1, 2]) -- 返回[1, 2, 3]
list.sort((a, b) -> a > b, [1, 2, 3]) -- 降序排序
fs.ls -l | list.sort('type',size)
list.unique
功能: 去除列表中重复元素(保留顺序)
参数: 列表
返回值: 去重后的新列表
示例:
list.unique([1, 2, 2, 3]) -- 返回[1, 2, 3]
list.split_at
功能: 在指定位置分割列表
参数:
- 分割位置(整数)
- 列表
返回值: 包含两个列表的新列表
示例:
list.split_at(2, [1, 2, 3, 4]) -- 返回[[1, 2], [3, 4]]
创建列表类函数 (Create)
list.concat
功能: 连接多个列表或元素
参数: 可变数量参数(列表或元素)
返回值: 连接后的新列表
示例:
list.concat([1, 2], [3, 4]) -- 返回[1, 2, 3, 4]
list.concat(1, 2, 3, 4) -- 返回[1, 2, 3, 4]
list.from
功能: 从范围或元素创建列表
参数:
- 范围(如1..10)或元素列表
返回值: 新列表
示例:
list.from(1..3) -- 返回[1, 2, 3]
list.from(1, 2, 3) -- 返回[1, 2, 3]
高阶操作类函数 (Higher-order)
list.map
功能: 对列表每个元素应用函数
参数:
- 映射函数
- 列表
返回值: 应用函数后的新列表
示例:
list.map(x -> x * 2, [1, 2, 3]) -- 返回[2, 4, 6]
list.filter
功能: 过滤列表元素
参数:
- 过滤函数(返回布尔值)
- 列表
返回值: 满足条件元素的新列表
示例:
list.filter(x -> x > 2, [1, 2, 3, 4]) -- 返回[3, 4]
list.filter_map
功能: 同时过滤和映射列表
参数:
- 函数(返回None表示过滤掉)
- 列表
返回值: 新列表
示例:
list.filter_map(x -> if x > 2 { x * 2 } else {None}, [1, 2, 3, 4]) -- 返回[6, 8]
list.reduce
功能: 从左到右归约列表
参数:
- 归约函数(接受累加值和当前元素)
- 初始值
- 列表
返回值: 归约结果
示例:
list.reduce((acc, x) -> acc + x, 0, [1, 2, 3]) -- 返回6
list.find
功能: 查找元素在列表中的位置
参数:
- 要查找的元素
- 列表
返回值: 索引(找到时)或None(未找到)
示例:
list.find(2, [1, 2, 3]) -- 返回1
分组与重组类函数 (Group & Reorganize)
list.group
功能: 按键函数分组
参数:
- 键函数 或 键名称(仅可用于列表项是映射时)
- 列表
返回值: 键值对映射 { key1: [items1,…], key2: [items2,…], … }
示例:
list.group(x -> x % 2, [1, 2, 3, 4]) -- 返回 {0: [2, 4]], 1: [1, 3]}
# 按类型分组
fs.ls -l | list.group 'type' # type是函数名,所以引号不能省略
+-----------------------------------------------------------------+
| KEY VALUE |
+=================================================================+
| directory +--------------------------------------------------+ |
| | MODE MODIFIED NAME SIZE TYPE | |
| +==================================================+ |
| | 493 2025-05-13 10:57 assets 102 directory | |
| | 493 2025-04-06 12:21 benches 66 directory | |
| | 493 2025-06-02 05:15 src 346 directory | |
| | 493 2025-03-23 11:58 target_ 128 directory | |
| | 493 2025-06-03 04:32 wiki 528 directory | |
| +--------------------------------------------------+ |
| file +--------------------------------------------------+ |
| | MODE MODIFIED NAME SIZE TYPE | |
| +==================================================+ |
| | 420 2025-03-23 05:32 LICENSE 1K file | |
| | 420 2025-05-29 12:57 README.md 4K file | |
| | 420 2025-06-02 06:26 Cargo.lock 46K file | |
| | 420 2025-05-29 12:57 README-cn.md 4K file | |
| | 420 2025-06-02 04:40 CHANGELOG.md 9K file | |
| | 420 2025-06-02 06:26 Cargo.toml 2K file | |
| +--------------------------------------------------+ |
| symlink +-----------------------------------------------+ |
| | MODE MODIFIED NAME SIZE TYPE | |
| +===============================================+ |
| | 511 2025-03-29 05:58 target 11 symlink | |
| +-----------------------------------------------+ |
+-----------------------------------------------------------------+
list.chunk
功能: 将列表分块
参数:
- 每块大小
- 列表
返回值: 分块后的列表
示例:
list.chunk(2, [1, 2, 3, 4]) -- 返回[[1, 2], [3, 4]]
list.zip
功能: 合并两个列表
参数:
- 列表1
- 列表2
返回值: 成对列表
示例:
list.zip([1, 2], ["a", "b"]) -- 返回[[1, "a"], [2, "b"]]
list.unzip
功能: 解压成对列表
参数: 成对列表
返回值: 两个列表
示例:
list.unzip([[1, "a"], [2, "b"]]) -- 返回[[1, 2], ["a", "b"]]
list.transpose
功能: 转置矩阵(列表的列表)
参数: 矩阵
返回值: 转置后的矩阵
示例:
list.transpose([[1, 2], [3, 4]]) -- 返回[[1, 3], [2, 4]]
list.foldl
功能: 从左到右归约列表
参数:
- 归约函数(接受累加值和当前元素)
- 初始值
- 列表
返回值: 归约结果
示例:
list.foldl((acc, x) -> acc + x, 0, [1, 2, 3]) -- returns 6
list.foldr
功能: 从右到左归约列表
参数:
- 归约函数(接受累加值和当前元素)
- 初始值
- 列表
返回值: 归约结果
示例:
list.foldr((acc, x) -> acc + x, 0, [1, 2, 3]) -- returns 6
实用工具类函数 (Utilities)
list.join
功能: 连接字符串列表
参数:
- 分隔符
- 字符串列表
返回值: 连接后的字符串
示例:
list.join(", ", ["a", "b", "c"]) -- 返回"a, b, c"
list.to_map
功能: 将列表转换为映射
参数:
- 可选: 键函数(默认为元素本身)
- 可选: 值函数(默认为元素本身),如果键值函数都省略,则以第0,2…个元素为键,第1,3…个元素为值
- 列表
返回值: 映射
示例:
list.to_map(x -> x.id, y -> y.name, [{id: 1,name: wang}, {id: 2,name: fang}]) -- 返回{1: wang, 2: fang}
list.to_map(x -> x.id, [{id: 1}, {id: 2}]) -- 返回{1: {id: 1}, 2: {id: 2}}
list.to_map([Q1, 45, Q2, 52, Q3, 49, Q4, 87]) -- 返回{Q1:45, Q2:52, Q3:49, Q4: 87}
list.emulate
功能: 模拟索引和值的枚举
参数: 列表
返回值: 索引-值对列表
示例:
list.emulate(["a", "b"]) -- 返回[[0, "a"], [1, "b"]]