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]