This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
api:transforms:zh [2023/12/01 07:23] hfsr [Transforms(变换) API] |
api:transforms:zh [2023/12/01 07:52] (current) hfsr [Transforms(变换) API] |
||
---|---|---|---|
Line 33: | Line 33: | ||
一些tranform方法可能会将第二个参数指定为可选,例如`transforms.first()`。 | 一些tranform方法可能会将第二个参数指定为可选,例如`transforms.first()`。 | ||
\\ | \\ | ||
- | 一些transform方法可能会指定其他类型的判断函数,例如表或字符串。这些判断函数的用法特定于对应的方法,且在此处详细列出的方法中定义。 | + | 一些transform方法可能会指定其他类型的判断类型,例如表或字符串。这些判断函数的用法特定于对应的方法,且在此处详细列出的方法中定义。 |
==== 方法 ==== | ==== 方法 ==== | ||
- | * `transforms.sub(tbl: table, first: number, last: number or nil): table` | + | * `transforms.sub(tbl: table, first: number, last: number or nil): table` |
- | + | 与`string.sub`作用类似,返回`tbl`从`first`到`last`的子表。 | |
- | 与 `string.sub` 作用类似,返回`tbl`从`first`到`last`的子表。 | + | \\ |
- | + | * `transforms.first(tbl: table, predicate: function or table, first: number or nil, last: number or nil): number, number` | |
- | * `transforms.first(tbl: table, predicate: function or table, first: number or nil, last: number or nil): number, number` | + | 返回`tbl`中(范围在`first`与`last`索引值之间,包含首尾)满足`predicate`的首个元素的索引值。第二个返回值为连续匹配的元素最后一个的索引值。一般而言会返回两个同样的值,即匹配的连续元素为1个。`predicate`可以返回第二个返回值(可选),代表匹配的连续元素序列长度。 |
- | + | \\ | |
- | 返回`tbl`中(范围在`first`与`last`索引之间,包含首尾)满足`predicate`的首个元素的索引。第二个返回值为最后一个连续匹配的元素索引。一般而言会返回两个同样的值,即匹配的连续元素为1个。`predicate`可以返回第二个返回值(可选),代表匹配的连续元素序列长度。 | + | 当`predicate`为表时,`transforms.first()`将会返回`tbl`中首个满足条件的子表的首尾索引值,这种情况下的匹配指匹配`predicate`表中的任一元素。 |
- | + | \\ | |
- | 当`predicate`为表时,`transforms.first()`将会返回`tbl`中首个满足条件的子表的首尾索引值,这种情况下的匹配指匹配`predicate`表中的任一元素。 | + | |
样例: | 样例: | ||
Line 80: | Line 78: | ||
``` | ``` | ||
- | * `transforms.partition(tbl: table, partioner: function, first: number or nil, last: number or nil): table of tables` | + | * `transforms.partition(tbl: table, partioner: function, first: number or nil, last: number or nil): table of tables` |
- | + | 返回一个子表的列表,子表来自`tbl`,由`partioner`生成,来源范围为从`first`到`last`。`partioner`为判断函数,定义见前文。 | |
- | 返回一个子表的列表,子表来自`tbl`,由`partioner`生成,范围为从`first`到`last`。`partioner`为判断函数,定义见前文。 | + | \\ |
- | + | 传递给`partitioner`的`index`参数将会跳过子表的范围,即此参数会增加`n`,`n`即为分区大小。 | |
- | 传递给`partitioner`的`index`参数将会跳过范围,即此参数会增加`n`,`n`即为分区大小。 | + | \\ |
- | + | 此方法的`partitioner`判断函数必须同时返回匹配的元素组的开始与结束索引。请再次参见前文的`predicate`相关信息。 | |
- | 此方法的`partitioner`判断函数必须同时返回匹配的元素组的开始与结束索引。请再次参见前文的`predicate`相关信息。 | + | \\ |
- | + | * `transforms.begins(tbl: table, sub: table, first: number or nil, last: number or nil)` | |
- | * `transforms.begins(tbl: table, sub: table, first: number or nil, last: number or nil)` | + | 若`tbl`从`first`到`last`的子表能完全组成`v`(自首个元素对齐),则返回`true`。`first`与`last`元素可以正确处理负数。上文描述也就是说: |
- | + | `v[1] == tbl[first + 0]` | |
- | 若`tbl`从`first`到`last`的子表完全组成了`sub`(自首个元素对齐),则返回`true`。`first`与`last`元素可以正确处理负数。上面的表达也就是说: | + | `v[2] == tbl[first + 1]` |
- | + | ... | |
- | `v[1] == tbl[first + 0]` | + | `v[#v] == tbl[first + #v - 1]` |
- | + | \\ | |
- | `v[2] == tbl[first + 1]` | + | 此处的`first + #v - 1`在`tbl`的`[first, last]`范围内。 |
- | + | \\ | |
- | ... | + | * `transforms.foreach(tbl: table, adapter: function, first: number or nil, last: number or nil)` |
- | + | 返回`tbl`中从`first`到`last`的每个元素的修改版本。若`adapter`的结果出现`nil`则会被忽略,不会被加入结果。 | |
- | `v[#v] == tbl[first + #v - 1]` | + | `adapter`函数遵循判断函数的格式,除了返回值处理方面。 |
- | + | * **Adapter函数返回值** | |
- | + | 简单的情况是返回单个值,例如`tx.foreach({'a', 'b', 'c'}, string.upper)`将会返回`{'A', 'B', 'C'}`。 | |
- | 此处的`first + #v - 1`在`tbl`的`[first, last]`范围内。. | + | adapter函数可以通过返回`nil`来跳过某个值。例如,`tx.foreach({'1', 'foobar', '2'}, function(n) return tonumber(n) end)`将会返回`{1, 2}`。 |
- | + | `adapter`函数可以返回第二个值,此值会被用作结果的下个序号。例如`tx.foreach({'1','foobar','3'},function(n,i) return tonumber(n), tostring(i) end)`将会返回`{["1"]=1, ["3"]=3}` | |
- | * `transforms.foreach(tbl: table, adapter: function, first: number or nil, last: number or nil)` | + | |
- | + | ||
- | 返回`tbl`中从`first`到`last`的每个元素的修改版本。若`adapter`的结果出现`nil`则会被忽略,不会被加入结果。 | + | |
- | + | ||
- | `adapter`函数遵循判断函数的格式,除了返回值处理方面 | + | |
- | + | ||
- | * **Adapter函数返回值** | + | |
- | + | ||
- | 简单的情况是返回单个值,例如`tx.foreach({'a', 'b', 'c'}, string.upper)`将会返回`{'A', 'B', 'C'}`。 | + | |
- | + | ||
- | adapter函数可以通过返回`nil`来跳过某个值。例如,`tx.foreach({'1', 'foobar', '2'}, function(n) return tonumber(n) end)`将会返回`{1, 2}`。 | + | |
- | + | ||
- | `adapter`函数可以返回第二个值,此值会被用于序号(返回结果键值)。例如`tx.foreach({'1','foobar','3'},function(n,i) return tonumber(n), tostring(i) end)`将会返回`{["1"]=1, ["3"]=3}` | + | |