スポンサーリンク
スポンサーリンク
解答例
characters = [
Character(name: .blu),
Portal(color: .pink),
Character(name: .hopper),
Gem()
]
character.remove(at: 1)
character.remove(at: 2)
characters.insert(Expert(), at: 1)
var rowPlacement = 0
for character in characters {
world.place(character, at: Coordinate(column: 1, row: rowPlacement))
rowPlacement += 1
}
解説
配列のインデックス(0から順番につけた数字)を使って、加えたり削除したりします。
Arrayのメソッドについて、まとめてみましょう。
remove(at: Int) | インデックスの位置にある項目を削除 |
---|---|
append(newElement: Element) | 配列の最後に項目を追加 |
insert(newElement: Element, at: Int) | 特定のインデックスの位置に項目を挿入 |
removeFirst() | 最初のインデックスの位置にある項目を削除 |
removeLast() | 最後のインデックスの位置にある項目を削除 |
removeAll() | 全てのインデックスの項目を削除 |
この課題で重要なことは、
インデックスは『0』から始まるということと、
例えば、最初にワープを削除すると、そのあとに続くもののインデックスが全て変わることです。
なので、次に宝石を削除する際、Character.remove(at: 3)
にしてしまうと
『Index out of range』と表示されてしまいます。
つまり、インデックスの範囲を超えてエラー(範囲外エラー)になってしまうのです。
ワープを削除すると、宝石の場所は2番目の行になっていることに注意しなくてはいけません。
要点まとめ
・インデックスの順番は固定されているわけではないので注意
スポンサーリンク