iBooks にある “The Swift Programming Language” の勉強メモ。Objective-C と C を普段書いている自分から、ちょっと馴染みがないものを特にまとめておきます。目次は こちら。
今回は、Collection Types の章の Array に関して。
Collection Types
1. Swing Array
Swift の Array は、型に厳格です。NSString ではできましたが、一つの Array に異なるデータ型を組み合わせて保存することはできません。また、次に紹介する Dictionary も同様です。
2. Array 型 のシンタックス
Array 型を作成するには、二通りあります。しかし、二つ目の [] を使用した方法がより簡単なので、ドキュメントもこちらを使用しています。
1 2 | var list1: Array<Int> = [1, 2, 3] var list2: Int[] = [1, 2, 3] |
3. Array の要素数
Array の要素数を得るには、読み込み専用の count プロパティを参照します。
1 | list1.count // 3 |
4. Array が空かのチェック
Array.count が 0 であるかをチェックするには、isEmpty プロパティを使用できます。
1 2 3 4 5 | if list2.isEmpty { println("This is empty array") } else { println("This isn't empty array") } |
5. 要素の追加
Array を var で宣言していれば、新しく配列を追加することができます。いくつかの方法があります。
まずは、append()を使用する方法。
1 | list2.append(1) |
次に、+= を使用する方法。
1 2 | list2 += 2 // add one element list2 += [3, 4, 5] // add multiple elements |
また、insert(atIndex:) メソッドを使用する方法。index を指定しますが、上書きするのではなく、その要素の場所に新しく値を入れて、前後を調整してくれます。失う要素はないです。
1 2 3 | var list = [1, 2, 3] list.insert(0, atIndex: 0) list // [0, 1, 2, 3] |
6. 要素の削除
要素を削除する方法もいくつかあります。
まずは、removeAtIndex()。削除された結果生まれる隙間は後続の要素が埋めてくれます。また、削除された値を返します。
1 | var removedItem = list.removeAtIndex(1) |
最後の要素を削除するには、removeLast()。また、削除された値を返します。
1 | var removedItem = list.removeLast() |
全て削除するには、removeAll(keepCapacity:)。
1 | list.removeAll(keepCapacity: true) |
7. 要素の範囲選択
Array の要素を range operator のように選択することができます。
1 2 3 4 5 | var arr = [1, 2, 3, 4, 5] arr[0...2] // [1, 2, 3] arr[0..2] // [1, 2] arr[0..2] = [] // [3, 4, 5] arr[0..3] = [1, 2] // [1, 2] |
このコードのように、柔軟に追加や削除等ができます。Playground で遊んでみるとわかりやすいと思います。
8. index と一緒に iteration
グローバル enumerate 関数を使用すれば、index と値の tuple を返してくれます。Array の index を使用したい時に便利です。
1 2 3 4 5 6 7 8 9 | var list = [10, 20, 30] for (i, item) in enumerate(list) { println("\(i) : \(item)") } /* Output: 0 : 10 1 : 20 2 : 30 */ |
9. Array の init, reset, default value
ある型の空の Array の作成
1 | var someInts = Int[]() // count is 0 |
Array のリセット
1 2 | someInts.append(3) someInts = [] // empty Int Array |
Array のサイズとデフォルト値を持っての初期化。
1 2 3 | var threeDoubles = Dounle[](count: 3, repeatedValue: 0.0) // [0.0, 0.0, 0.0] var anotherThreeDoubles = Array(count: 3, repeatedValue: 2.5) |
10. Array の結合
String と同じ要領で二つの Array を結合できます。
1 2 3 4 | threeDoubles // [0.0, 0.0, 0.0] anotherThreeDoubles // [2.5, 2.5, 2.5] var sixDoubles = threeDoubles + anotherThreeDoubles // sixDoubles is inferred as Double[], and equals [0.0, 0.0, 0.0, 2.5, 2.5, 2.5] |