Swift の Array(配列)- 要素の変更・追加
ここでは Swift の Array(配列)について基本的なことと、配列の要素の変更と追加の方法についてご説明します。
Swift の Array(配列)の基本
Swift の Array(配列)は順序を意識した、複数の値の集合です。
それぞれの値は文字列でも数字でもいいですし、クラスのオブジェクトを格納することもできます。
Set(セット)とは違って、配列内の値はユニークである必要はなく、同じ値が違うインデックスに存在していても大丈夫です。
Swift で Array(配列)を作りたい時は、[データ型] のようにデータ型を指定します。
例えば、names という文字列の Array を作って、空に初期化したい時は、次のようにできます。
var names: [String] = []
以下のように作っても同じ意味ですが、Swift の公式ドキュメントでは [データ型] のほうが推奨されています。
var names: Array<String> = Array()
その他の変数の定義と同様で、次のようにデータ型を指定せずに値をいきなりアサインして Array を定義することもできます。
var names = ["Tanaka", "Suzuki", "Sato", "Yamada"]
Array を変更する必要がない時は var ではなくて let で定義します。
let names = ["Tanaka", "Suzuki", "Sato", "Yamada"]
それでは、Swift の Array を使っていきましょう。
Swift の Array(配列)要素にアクセスする
Swift の Array(配列)の中のひとつひとつのデータのことは要素といい、インデックスを指定することによって、各要素にアクセスすることができます。
Swift のインデックスは 1 からではなく、0 から始まります。 1 番最初が 0、2 番目が 1、3 番目が 2、、となります。
例えば、ひとつ目と 3 つ目の要素を取得したい時は次のようにします。
let names = ["Tanaka", "Suzuki", "Sato", "Yamada"]
print(names[0])
print(names[2])
実行結果は次のようになります。
Tanaka
Sato
範囲指定で Array(配列)要素にアクセスする
Swift の範囲演算子 を使って、Array[範囲演算子]のように範囲を指定して、Array(配列)を要素を取得することができます。
実際に試してみましょう。
let names = ["Tanaka", "Suzuki", "Sato", "Yamada"]
print(names[1...2])
print(names[2...])
print(names[...2])
print(names[..<2])
指定した範囲演算子は次のような意味です。
- 1...2 はインデックスが 1 から 2 まで
- 2... はインデックスが 2 から残り全部
- ...2 はインデックスが一番最初から 2 まで
- ..<2 はインデックスが一番最初から 1 まで
実行結果は次のようになり、それぞれ上でご説明した通りのインデックスの要素を持つ Array(配列)が出力されていますね。
["Suzuki", "Sato"]
["Sato", "Yamada"]
["Tanaka", "Suzuki", "Sato"]
["Tanaka", "Suzuki"]
let names2 = names[1...2] とした場合、この names2 は ArraySlice といい、元の Array へのポインターのようなものになります。ですのでインデックスでアクセスする時は元の配列のままになります。上の例の場合だと、names2[1] が "Suzuki" で、names2[0] にアクセスしようとするとエラーになります。ArraySlice ではなくて、指定した範囲の要素を持つ新しい Array を作りたい時は、let names2 = Array(names[1...2]) のようにすると、指定した範囲の要素を持つ Array になり、インデックスも 0 からふりなおされます。
Swift の Array(配列)の値を変更する
Swift の Array(配列)の値を変更するには、インデックスを指定してその要素に新しい値を代入します。
例えば、2 番目の要素を "Yamamoto" に変更したい時は次のようにします。
Array を変更するので、変数の定義の箇所を let から var に変えています。
var names = ["Tanaka", "Suzuki", "Sato", "Yamada"]
print(names)
names[1] = "Yamamoto"
print(names)
実行結果は次のようになり、2 番目が "Yamamoto" に変更されていますね。
["Tanaka", "Suzuki", "Sato", "Yamada"]
["Tanaka", "Yamamoto", "Sato", "Yamada"]
append() メソッドで Array(配列)に要素を追加する
Swift の Array(配列)に要素を追加するには、 Array(配列)の一番最後に追加する方法と、インデックスを指定して、その場所に追加する方法があります。
Array(配列)の一番最後に追加するには append() というメソッドを使います。
空っぽの Array(配列)を定義して、append() を使って要素を三つ追加してみます。
var names: [String] = []
names.append("Tanaka")
print(names)
names.append("Suzuki")
print(names)
names.append("Sato")
print(names)
実行結果は次のようになり、値が順番に Array(配列)の一番後ろに追加されていっています。
["Tanaka"]
["Tanaka", "Suzuki"]
["Tanaka", "Suzuki", "Sato"]
append() メソッドで Array を結合する
append() メソッドで Array(配列)の一番後ろに、別の Array の要素を追加することもできます。
その時は append(contentsOf: 別のArray) のように使います。
例えば、name2 という別の配列を定義、name に name2 の要素を追加したい時は次のようにできます。
var names: [String] = []
var names2 = ["Sato", "Yamada"]
names.append("Tanaka")
print(names)
names.append(contentsOf: names2)
print(names)
実行結果は次のようになり、names2 の要素が追加されています。
["Tanaka"]
["Tanaka", "Sato", "Yamada"]
insert() メソッドで Array(配列)に要素を追加する
Swift の Array(配列)にインデックスを指定して、その場所に要素を追加するには、insert() という名前のメソッドを使います。
insert([追加したい値], at: [追加したい位置]) のように指定します。
例えば、2 番目に新しい値を挿入したい場合は次のようにします。
var names = [ "Tanaka", "Suzuki", "Sato", "Yamada"]
print(names)
names.insert("Ishikawa", at: 1)
print(names)
実行結果は次のようになり、2 番目に "Ishikawa" が挿入されて、残りの要素は後ろにずれています。
["Tanaka", "Suzuki", "Sato", "Yamada"]
["Tanaka", "Ishikawa", "Suzuki", "Sato", "Yamada"]
以上、Swift の Array(配列)の基本と、要素の変更と追加の方法についてご説明しました。