Lumesh list模块

wiki libs

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"]]