YStudio Y++

04 — 数组

Y++ / YStudio 开发文档 · 一点滴

Y++ 数组声明:元素类型 数组名[] 或 元素类型 数组名[长度](禁止 元素类型[] 名)。
下标从 0 开始。[长度] 会预分配该长度的数组(整数元素初值为 0)。

面板/签名里的 整数数组 / 文本数组 表示「整数类型的数组」「文本类型的数组」,只声明一个变量,例如:

整数 arr[] = []
文本 list[] = []
点 points[] = []

函数形参/返回同样写 整数 a[]、文本 list[]、函数 f() 文本[](详见 language.md §5.1);勿只写「数组」再与文本数组混用。

假定:

点 {
    整数 x = 0,
    整数 y = 0
}

线 {
    点 a,
    点 b
}

部门 {
    文本 名称 = "未命名",
    点 成员[100]
}

1. 自定义类型的一维数组

字面量初始化

点 arr[] = [{1, 2}, {5, 6}, {9, 10}]
  • 外层 […]:数组
  • 内层 {…}:每个元素是一个 点

逐元素赋值(更清晰)

点 arr[] = [{0, 0}, {0, 0}, {0, 0}]
arr[0].x = 1
arr[0].y = 2
arr[1].x = 5
arr[1].y = 6
arr[2].x = 9
arr[2].y = 10

输出(到文本(arr[0].x)) // 1
arr[0].x = arr[0].x + 10
输出(到文本(arr[0].x)) // 11

arr[1] = {100, 200}     // 替换整个元素(可选)

空数组:点 空[] = []


2. 嵌套类型的数组

线 边表[] = [
    {{0, 0}, {1, 0}},
    {{1, 0}, {1, 1}}
]

输出(到文本(边表[0].a.x)) // 0
输出(到文本(边表[1].b.y)) // 1

边表[0].b.x = 10
边表[1].a.y = 5

逐字段版:

线 边表[] = [{{0, 0}, {0, 0}}, {{0, 0}, {0, 0}}]
边表[0].a.x = 0
边表[0].a.y = 0
边表[0].b.x = 1
边表[0].b.y = 0

3. 类型内的数组字段

部门 d
d.名称 = "研发"
// 成员是字段数组:先整体赋字面量,再按下标改
d.成员 = [{10, 20}, {30, 40}]

输出(到文本(d.成员[0].x)) // 10
d.成员[1].y = 99
输出(到文本(d.成员[1].y)) // 99

也可:

部门 d = {"研发", [{10, 20}, {30, 40}]}

4. 外层数组 + 字段数组(双层下标)

这是最常用的「多层」形态,详见 09:

部门 表[] = [
    {"甲组", [{1, 2}, {3, 4}]},
    {"乙组", [{5, 6}]}
]

输出(到文本(表[0].成员[1].x)) // 3
表[1].成员[0].x = 100
输出(表[0].名称)               // 甲组

5. 二维数组

点 网格[][] = [
    [{0, 0}, {1, 0}],
    [{0, 1}, {1, 1}]
]
输出(到文本(网格[0][1].x)) // 1
网格[1][0].y = 99

6. 与内建数组对照

文本 名[] = ["甲", "乙"]
整数 分[] = [10, 20, 30]
点   坐标[] = [{0, 0}, {1, 1}]

规则相同:类型 名[],下标从 0。


7. 数组元素传给函数

函数 处理一点(点 p) {
    输出(到文本(p.x))
}

函数 主窗口.创建完毕() {
    点 arr[] = [{3, 4}]
    处理一点(arr[0])
}