Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

  1. トップページ
  2. Swift入門編 - 配列の要素の追加や削除について

配列の要素の追加や削除について

みなさまどうもおはこんばんにちは。

さて、前回の記事では配列の基本的なところを解説しましたので今回は配列の要素を追加したり削除したりといったところをやっていきましょう。

というわけで以下のサンプルをちょいと見てみてください。

var arr = [0, 1]

上記のサンプルは要素『0』と要素『1』を持つ配列『arr』を定義している感じですね。なので『配列』の全要素数は2個、最後のインデックス(インデックス番号)は『0』から数え始めるため『1』になります。

この配列の要素を増やしたい、つまりインデックス『2』の要素を追加したい、といった場合に以下のように書くとNGです。以下は数値『2』を追加しようとしたパターンですね。

var arr = [0, 1]

arr[2] = 2 // これはNGです。

これ、他の言語ではOKだったりするのですがSwiftではNGだったりします。

こういう場合は以下のように書きます。

var arr = [0, 1]

arr += [2] // 数値『2』を新しい要素として追加します。

+=』で『[2]』を追加していますね。

ちょっと注意点ですが、以下のようにするとダメです。先ほどとは違い、『[]』で囲ってない状態で渡しています。

var arr = [0, 1]

arr += 2 // エラーです。

『+=』を使用して要素を追加する場合は、追加したい要素を『[]』で囲ってあげた『配列リテラル』とかで渡す必要があります。ここ間違いやすいので気をつけて下さい。

ちなみに上記のサンプル(『[]』で囲わない状態で値を渡す事)は昔はOKだった気がするのですが、最近はダメになっちゃったみたいですね。いつからダメになったのかはちょっと謎です。

そして複数の要素を一度に追加したい、という場合は以下のように『,』で区切って渡してあげればOKです。

var arr = [0, 1]

arr += [2, 3, 4]

print(arr) // 『[0, 1, 2, 3, 4]』が出力されます。

値とかを『[]』でくくらずに渡したい、といった場合は『.append()』っていうのを使用することで実現できます。

『.append()』は配列(配列のインスタンス)に用意されたメソッドで、『配列名.append(追加したい要素)』って感じの記述になります。

var arr = [0, 1]

arr.append(2)

print(arr) // 『[0, 1, 2]』と出力されます。

『.append()』を使って複数の値を同時に追加したい場合は『.append()』の『()』の中で『contentsOf: [要素]』という形で記述します。以下のような形ですね。

var arr = [0, 1]

arr.append(contentsOf: [2, 3]) // 複数の値を同時に追加します。
// arr.append(2, 3) // このような記述だとエラーになりますのでご注意です。

print(arr) // 『[0, 1, 2, 3]』が出力されます。

ちょっと注意点ですが、ちょっと前のSwiftでは『.appendContentsOf()』ってやつがいて、こいつでも複数の値を同時に追加することができました。

var arr = [0, 1, 2]

arr.appendContentsOf([3, 4]) // 昔はこんな感じで追加することができました。

この『.appendContentsOf()』は最新版のSwiftではなくなっちゃいましたので使えません。ご注意下さい。

ちなみに『.append()』を使うよりは『+=』で要素を追加したほうが楽ちんなので『.append()』を使う機会は少なめです。

そして「指定したインデックス番号で要素を入れたいぜ!」といった場合には『.insert()』ってやつを使います。ちょいと以下のサンプルを見てみて下さい。

var arr = [0, 1, 2, 3, 4]

arr.insert(5, at: 2) // インデックス番号『2』の要素として数値『5』を追加します。

print(arr) // 『[0, 1, 5, 2, 3, 4]』が出力されます。

『arr.insert(5, at: 2)』って感じで記述してありますね。『配列名.insert(値, at: 追加したいインデックス番号)』って感じで記述することでインデックス番号を指定しつつ要素を追加することができます。

例えば数値『7』を1番目の要素として追加したい場合はこうなりますね。

var arr = [0, 1, 2, 3, 4]

arr.insert(7, at: 1) // インデックス番号『1』の要素として数値『7』を追加します。

print(arr) // 『[0, 7, 1, 2, 3, 4]』が出力されます。

そんでもってインデックス番号を指定しつつ複数の要素を追加したい場合は『配列名.insert(contentsOf: 配列, at: 追加したいインデックス番号)』と記述します。こんな感じです。『contentsOf:』を入れないといけない、というところに気をつけて下さい。

var arr = [0, 1, 2, 3, 4]

arr.insert(contentsOf: [7, 8], at: 1) // インデックス番号『1』の位置から配列『[7, 8]』を追加します。

print(arr) // 『[0, 7, 8, 1, 2, 3, 4]』が出力されます。

以上がよく使われる配列の追加パターンになりますね。ちょっとややこしくなってきましたが大丈夫そうでしょうか。

ちょっと前のSwiftでは『.insertContentsOf()』ってやつがいて、こいつでもインデックス番号を指定しつつ配列を追加することができました。

var arr = [0, 1, 2, 3, 4]

arr.insertContentsOf([7, 8], at: 1) // 昔はこれでもOKでした。

しかし、こいつも最新版のSwiftではいなくなってしまったのでご注意です。

(´-`).。oO(Swiftはめちゃめちゃアップデートが早いのでご注意くださいませ...)

続いて配列の要素を削除してみましょう。

最初の要素(インデックス番号『0』の要素)を削除するには『.removeFirst()』ってやつを使います。以下のサンプルを見てみて下さい。

var arr = [0, 1, 2, 3, 4]

arr.removeFirst()

print(arr) // 『[1, 2, 3, 4]』が出力されます。

配列『arr』の最初の要素が削除されて『[1, 2, 3, 4]』と出力されていますね。上記のように『配列名.removeFirst()』って感じで記述すれば最初の要素を削除してくれます。

最後の要素を削除したい場合は『配列名.removeLast()』と記述すればOKです。

var arr = [0, 1, 2, 3, 4]

arr.removeLast()

print(arr) // 『[0, 1, 2, 3]』が出力されます。

最後の要素が削除されて『[0, 1, 2, 3]』と出力されていますね。

そして指定したインデックス番号の要素を削除したい、といった場合には『配列名.remove(at: インデックス番号)』って感じで記述します。こんな感じですね。

var arr = [0, 1, 2, 3, 4]

arr.remove(at: 1)

print(arr) // 『[0, 2, 3, 4]』が出力されます。

インデックス番号『1』の数値『1』が削除されているのが確認できたと思います。配列の要素を削除したい場合は上記の3つを覚えておけばOKです。

インデックス番号を指定して要素を削除する場合に、ちょっと前のSwiftでは『.removeAtIndex()』ってやつを使ってもOKでした。記述方法は『配列名.removeAtIndex(インデックス番号)』って感じになりますね。

var arr = [0, 1, 2, 3, 4]

arr.removeAtIndex(1)

これも最新のSwiftではなくなっちゃいましたのでご注意下さい。

Swiftでは『==』や『!=』を使って配列同士の比較を行うことができます。要素数が同じで、かつ中身も同じだった場合に『true』となります。こんな感じですね。

let arr = [0, 1, 2],
    arr1 = [0, 1, 2],
    arr2 = [0, 1, 2, 3]

print(arr == arr1) // true
print(arr != arr1) // false
print(arr == arr2) // false

配列同士の比較処理はたまに使うので覚えておくとよいかもです。

というわけで配列の追加と削除については以上になります。

ただでさえややこしいのに、ちょっと昔のSwiftと最近のSwiftで記述方法が違ったりしてるので大変だったと思いますが大丈夫そうでしょうか。

続いての記事では配列の使い方について色々とみていきましょう。ではこの辺で。失礼致します。

この記事は桜舞が執筆致しました。

著者が愛する小型哺乳類

桜舞 春人 Sakurama Haruto

ISDN時代から様々なコンテンツを制作しているちょっと髪の毛が心配な東京在住のプログラマー。生粋のロングスリーパーで、10時間以上睡眠を取らないと基本的に体調が悪い。好きなだけ寝れる生活を送るのが夢。ゲームとスポーツと音楽が大好き。誰か髪の毛を分けて下さい。

記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。