ジャグ配列
CoddyのGDScriptジャーニー「ロジックとフロー」セクションの一部。レッスン 16/78。
2D 配列の各行の長さは同じである必要はありません。行ごとに長さが異なる 2D 配列はジャグ配列です。ここでは各行に 1 人のプレイヤーのスコアが格納されており、プレイヤーごとにプレイしたラウンド数が異なります:
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]] は、3 行の有効なジャグ配列です。
チャレンジ
簡単make_triangleという名前の関数を作成し、int型のパラメーターnを1つ受け取ります。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オンラインコンパイラ