不规则数组
本课属于 Coddy GDScript 学习旅程的“逻辑与流程”单元。第 16 课,共 78 课。
二维数组的各行长度不必相同。各行长度不同的二维数组称为锯齿数组。这里,每一行保存一位玩家的分数,而玩家参加的回合数各不相同:
var scores := [
[90, 85, 70],
[60],
[75, 80]
]
print(scores[0].size()) # 3
print(scores[1].size()) # 1在锯齿数组中,scores[0].size() 并不是每一行的长度。使用 scores[r].size() 遍历当前行的列:
for r in range(scores.size()):
var total := 0
for c in range(scores[r].size()):
total += scores[r][c]
print("Player ", r + 1, ": ", total)Player 1: 245
Player 2: 60
Player 3: 155如果循环始终使用第一行的长度,就会越过较短行的末尾:scores[1][2] 会导致错误,因为第 1 行只有索引 0。for value in row 始终适用于它遍历的行。
你可以像网格一样构建锯齿状数组,让每一行的长度都不同。在这个三角形中,第 r 行有 r + 1 个单元格:
var triangle := []
for r in range(4):
var row := []
for c in range(r + 1):
row.append("*")
triangle.append(row)
for row in triangle:
print("".join(row))*
**
***
****一行甚至可以为空:[[1, 2], [], [3]] 是一个包含三行的有效锯齿数组。
挑战
简单编写一个名为 make_triangle 的函数,它有一个 int 参数 n。它会返回一个包含 n 行的锯齿数组:
- 第 1 行有 1 个单元格,第 2 行有 2 个单元格,以此类推,直到第
n行有n个单元格。 - 从 1 开始计算行和列,每个单元格的值等于行号乘以列号。第 3 行、第 2 列的单元格的值是
3 * 2 = 6。
例如,make_triangle(3) 返回:
[[1], [2, 4], [3, 6, 9]]测试会自行调用 make_triangle() 并检查返回的数组。不要调用它,也不要打印任何内容。
亲手试试
func make_triangle(n: int):
# 在这里写代码
pass
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: GDScript 在线编译器