Swiftの基本データ型の一つである配列に関して説明します。

配列は複数のデータをまとめて管理するためのデータ構造で、JavaやRubyの配列とほぼ同じような感覚で使用することができます。

宣言

初期データを指定して配列を宣言する場合、配列の型は暗黙的に推測されるため不要です。ただしこの場合でも要素の型を明示的に指定することでソースコードが読みやすくなるメリットがあります。

また空の配列を宣言する場合は要素の型の指定が必須となります。

//配列の宣言
let numbers = [2, 4, 6, 8]
let strings = ["りんご", "かき", "もも"]

//型を明示して宣言(数値型の場合型を指定したほうが分かりやすい)
let doubles: [Double] = [2.3, 2,3, 4,5]

//空配列の宣言
let emptyNumbers = [Int]()
let emptyStrings = [String]()

取得

配列のサイズや空判定、要素を取得することができます。

//サイズの取得
var values = [2, 4, 6, 8]
values.count //=> 4


//空かどうかを判定
values = [2, 4, 6, 8]
values.isEmpty //=> false

//値の列挙: forループを使う
values = [2, 4, 6, 8]
for num in values {
    print(num)
}

//値の取得
values = [2, 4, 6, 8]
values[1] //=> 4

変更

配列の値の変更、追加、削除が可能です。

//値の変更
var stringValues = ["りんご", "かき", "もも"]
stringValues[0] = "トマト"
stringValues //=> ["トマト", "かき", "もも"]

//配列の末尾に値を挿入する
values = [2, 4, 6, 8]
values.append(10) //=> [2, 4, 6, 8, 10]

//配列の任意のインデックスの前に値を追加する
values = [2, 4, 6, 8]
values.insert(3, atIndex: 1) //=>[2, 3, 4, 6, 8]

//値の削除
values = [2, 4, 6, 8]
values.removeLast() //=> 8
values //=> [2, 4, 6]
values.removeAtIndex(1) //=> 4
values //=> [2, 6]

//全部削除
values = [2, 4, 6, 8]
values.removeAll()
values //=>[]

ソート

配列を並び替えることもできます。ソートした新しい配列を取得したい場合はsortを、配列そのものをソートしたい場合はvalues.sortInPlaceを使用します。

//逆順に並べ替え
let numbers12 = [2, 4, 6, 8]
let reversed_numbers12 = numbers12.reverse()
reversed_numbers12 //=> ReverseRandomAccessCollection<Array<Int>>

//指定条件でソート
values = [300, 200, 100]
let sorted_values = values.sort {$0 < $1 }
values //=> [300, 200, 100] 元の配列は変わっていない
sorted_values //=> [100, 200, 300] sortの戻り値が変わっている

//配列そのものをソート
values = [300, 200, 100]
values.sortInPlace {$0 < $1 }
values //=> [300, 200, 100] 元の配列がソートされる

//クラスの配列をプロパティでソート
class Person {
    var name = ""
    init(name: String) {
        self.name = name
    }
}
let person_bbb = Person(name: "bbb")
let person_aaa = Person(name: "aaa")
let persons = [person_bbb, person_aaa]
let sorted_persons = persons.sort {$0.name < $1.name}
persons //=> [{name "bbb"}, {name "aaa"}]
sorted_persons //=>[{name "aaa"}, {name "bbb"}]

コピー

配列をコピーしたり連結した場合、元の配列とは別の配列が作られます。

//配列のコピー
var org_values = [2, 4, 6, 8]
var copy_values = org_values
copy_values[0] = 999
org_values //=> [2, 4, 6, 8]
copy_values //=> [999, 4, 6, 8]

//配列の連結
let values1 = [10, 20, 30]
let values2 = [100, 200, 300]
let concat_values = values1 + values2 //=> [10, 20, 30, 100, 200, 300]