/

表格操作

本页描述了表格操作函数 文档 ↗,它们允许你对任意类型的表格进行排序、过滤与计算,包括纯 Markdown 表格以及那些从 CSV 加载的表格。

示例 1

.tablesort {2} order:{descending}
    .csv {assets/people.csv}
UsernameBirth yearFavorite foodFavorite drink
iamgio2002PastaIced tea
john1992ChickenOrange juice
daniel1986SushiBeer

对行排序

.tablesort 函数基于某一特定列的值对表格进行排序。

参数说明可接受值
column列的索引,从 1 开始。1 到列的总数。
order排序方向。ascending(默认)、descending

示例 2

.tablesort {2} order:{descending}
    | Name | Age | City |
    |------|-----|------|
    | John | 25  | NY   |
    | Lisa | 32  | LA   |
    | Mike | 19  | CHI  |
NameAgeCity
Lisa32LA
John25NY
Mike19CHI

示例 3

排序会遵循人类最自然的对字符串排序的方式(字母数字排序):

.tablesort {2}
    |   Item   | Price |
    |----------|-------|
    | Pencil   | $1    |
    | Eraser   | $0.50 |
    | Backpack | $20   |
    | Notebook | $3    |
ItemPrice
Eraser$0.50
Pencil$1
Notebook$3
Backpack$20

过滤行

.tablefilter 函数根据某一特定列的值来保留或移除行。

参数说明可接受值
column列的索引,从 1 开始。1 到列的总数。
filter一个 lambda,返回每一行是否应当被保留,其输入为该行在对应列中的单元格值。DynamicBooleanlambda

示例 4

.tablefilter {2} {x: .x::isgreater {20}}
    | Name | Age | City |
    |------|-----|------|
    | John | 25  | NY   |
    | Lisa | 32  | LA   |
    | Mike | 19  | CHI  |
NameAgeCity
John25NY
Lisa32LA

计算/聚合列

.tablecompute 函数计算某一列中的单元格,并将结果追加到一个新行。

参数说明可接受值
column列的索引,从 1 开始。1 到列的总数。
compute一个 lambda,返回计算后的值,其输入为该列中单元格的集合。IterableDynamiclambda

请参阅Iterable ,了解集合上可用的操作。

示例 5

.tablecompute {2} {x: .x::average::round}
    | Name | Age | City |
    |------|-----|------|
    | John | 25  | NY   |
    | Lisa | 32  | LA   |
    | Mike | 19  | CHI  |
NameAgeCity
John25NY
Lisa32LA
Mike19CHI
25

组合

你可以链式组合多个表格操作。操作的顺序由内到外:

示例 6

.tablecompute {2} {x: .x::average::round}
    .tablesort {2}
        | Name | Age | City |
        |------|-----|------|
        | John | 25  | NY   |
        | Lisa | 32  | LA   |
        | Mike | 19  | CHI  |
NameAgeCity
Mike19CHI
John25NY
Lisa32LA
25

取回列

.tablecolumn 函数从某一特定列的单元格中提取出值,并将其作为一个 Iterable 返回。

参数说明可接受值
column列的索引,从 1 开始。1 到列的总数。

示例 7

.var {values}
    .tablecolumn {2}
        | Name | Age | City |
        |------|-----|------|
        | John | 25  | NY   |
        | Lisa | 32  | LA   |
        | Mike | 19  | CHI  |

.values::first

25

批量取回列

此外,.tablecolumns 函数将表格中的所有列作为一个由可迭代对象组成的可迭代对象返回。当你需要从同一张表格访问多个列时,相比多次调用 .tablecolumn,这种方式更高效。

示例 8

.var {columns}
    .tablecolumns
        | Name | Age | City |
        |------|-----|------|
        | John | 25  | NY   |
        | Lisa | 32  | LA   |
        | Mike | 19  | CHI  |

.foreach {.columns}
    col:
    .col::first

John

25

NY