@@ -4,10 +4,14 @@
|
||||
|
||||
## 本篇职责
|
||||
|
||||
<!-- section-id: syntax-11-001 -->
|
||||
|
||||
回答“`array(...)` 在 TSL 里除了最普通的一维数组,还能怎样组织数据;哪些矩阵样写法属于本页文档明确形态;元素、子集、整行和行集合关系应该怎样判断”。
|
||||
|
||||
## 核心规则
|
||||
|
||||
<!-- section-id: syntax-11-002 -->
|
||||
|
||||
- `array(...)` 既可以写顺序数组,也可以写字符串键表。
|
||||
- 顺序数组下标从 `0` 开始;字符串仍然从 `1` 开始。
|
||||
- `array(...)` 可以继续嵌套,形成二维或矩阵样数据。
|
||||
@@ -21,9 +25,13 @@
|
||||
|
||||
## 可直接照写示例
|
||||
|
||||
<!-- section-id: syntax-11-003 -->
|
||||
|
||||
### 基础数组与键表
|
||||
|
||||
<!-- tags: 建数组, 字典, 键值对, 二维数组, 嵌套数组, 按名字取值 -->
|
||||
<!-- section-id: syntax-11-004 -->
|
||||
|
||||
<!-- tags: 建数组, 数组下标, 数组索引, array 下标, 字典, 键值对, 二维数组, 嵌套数组, 按名字取值 -->
|
||||
|
||||
顺序数组与字符串键表:
|
||||
|
||||
@@ -71,6 +79,8 @@ writeLn(r2[1]);
|
||||
|
||||
### 矩阵样比较
|
||||
|
||||
<!-- section-id: syntax-11-005 -->
|
||||
|
||||
<!-- tags: 数组比大小, 链式比较, 整体比较 -->
|
||||
|
||||
矩阵链式比较:
|
||||
@@ -96,6 +106,8 @@ writeLn(s[2]);
|
||||
|
||||
### `in`、`not in`、`sqlin`、`not sqlin`
|
||||
|
||||
<!-- section-id: syntax-11-006 -->
|
||||
|
||||
<!-- tags: 判断存在, 是否包含, 在不在里面, 子集判断 -->
|
||||
|
||||
`in` 既可以判断单个元素是否存在,也可以判断左侧数组是否是右侧结果集的子集:
|
||||
@@ -156,6 +168,8 @@ writeLn(array(5, 6) not sqlin array((1, 2), (3, 4)));
|
||||
|
||||
### 行集合并、交、差、对称差
|
||||
|
||||
<!-- section-id: syntax-11-007 -->
|
||||
|
||||
<!-- tags: 交集, 并集, 差集, 合并两个数组, 去重合并, 共同部分 -->
|
||||
|
||||
下面这组最小例子展示“按行运算”和“结果会折叠重复行”:
|
||||
@@ -192,6 +206,8 @@ outersect_rows := left_rows outersect right_rows;
|
||||
|
||||
## 和过滤运算的区别
|
||||
|
||||
<!-- section-id: syntax-11-008 -->
|
||||
|
||||
<!-- tags: 集合还是过滤, 重复行怎么办, 两种运算怎么选 -->
|
||||
|
||||
- 集合运算先把数据当成“行集合”来看,再做包含、并交差。
|
||||
@@ -201,6 +217,8 @@ outersect_rows := left_rows outersect right_rows;
|
||||
|
||||
## 默认生成模板
|
||||
|
||||
<!-- section-id: syntax-11-009 -->
|
||||
|
||||
按需求语义从下面两种模板中选择:
|
||||
|
||||
代码块身份:可直接照写示例
|
||||
@@ -212,6 +230,8 @@ row_matched := array(1, 2) sqlin array((1, 2), (3, 4));
|
||||
|
||||
## 点前缀比较算符产生逻辑数组
|
||||
|
||||
<!-- section-id: syntax-11-010 -->
|
||||
|
||||
<!-- tags: 逐元素比较, 得到真假数组, 批量判断, 掩码 -->
|
||||
|
||||
点前缀比较(`.=`、`.<>`、`.>`、`.>=`、`.<`、`.<=`)对数组/矩阵逐元素比较,返回真假值数组:
|
||||
@@ -277,6 +297,8 @@ writeLn("子集 (1,0):", subset[1][0]);
|
||||
|
||||
## 非完全矩阵缺位当 0 处理与标量广播
|
||||
|
||||
<!-- section-id: syntax-11-011 -->
|
||||
|
||||
<!-- tags: 长度不一致, 缺位补零, 标量广播, 数组和数字运算 -->
|
||||
|
||||
基础算符作用于非完全矩阵(行长度不一致或字符串键不对齐的数组)时,对应位置不存在或为 `nil` 时**默认当 0 处理**:
|
||||
@@ -336,6 +358,8 @@ writeLn("(1,1):", result[1][1]);
|
||||
|
||||
## 本页不生成的范围
|
||||
|
||||
<!-- section-id: syntax-11-012 -->
|
||||
|
||||
- 专门的结果集过滤函数
|
||||
- TS-SQL 查询与写回
|
||||
- 更大范围的矩阵函数族
|
||||
@@ -344,6 +368,8 @@ writeLn("(1,1):", result[1][1]);
|
||||
|
||||
## 禁止项
|
||||
|
||||
<!-- section-id: syntax-11-013 -->
|
||||
|
||||
- 不要把字符串下标按数组的 `0` 起始规则来写;字符串下标从 `1` 开始,详见 [03_values_and_literals.md](03_values_and_literals.md)。
|
||||
- 不要把矩阵链式比较 `::...` 和标量链式比较混写成同一种语法。
|
||||
- 不要把 `in` 和 `sqlin` 当成同一个概念。
|
||||
|
||||
Reference in New Issue
Block a user