Menu
CoddyTech

不规则数组

本课属于 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]] 是一个包含三行的有效锯齿数组。

challenge icon

挑战

简单

编写一个名为 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
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: GDScript 在线编译器