PHPer向けのSwift入門<配列操作編>

#はじめに
これは[Hamee Advent Calendar 2015](http://qiita.com/advent-calendar/2015/hamee)の16日目の記事です。

この記事では、PHPがある程度触れている人向けに、Swiftではこんな感じで書きますよというのをざっくりとまとめてあります。
今回は、配列操作に絞ってお送りしたいと思います。


##配列の要素数を取得する
#### PHP

```php
$array = [0,1,2,3];
count($array); // -> 4
```
####Swift

```swift
var array = [0,1,2,3]
var arrayCount = array.count // -> 4
```

##配列の末尾に新しい要素を追加する
#### PHP

```php
$array = [0,1,2,3]
array_push($array,4) // -> [0,1,2,3,4]
```
#### Swift
```swift
var array = [0,1,2,3]
array.append(4) // -> [0,1,2,3,4]
```

##配列のすべての要素を削除する
####PHP

```php
$array = [0,1,2,3];
array_splice($array,0,count($array));
print_r($array); // ->[]
```

####Swift

```swift
var array = [0,1,2,3]
array.reomoveAll // -> []
```

##配列の先頭の要素を削除する
####PHP

```php
$array = [0,1,2,3]
array_shift($array) // ->  [1,2,3]
```
####Swift

```swift
var array = [0,1,2,3]
array.removeFirst() // -> [1,2,3]
```

##配列の末尾の要素を削除する
####PHP

```php
$array = [0,1,2,3]
$num = array_pop($array)
print_r($array) // -> [0,1,2]
```

####Swift
```swift
var array = [0,1,2,3]
array.removeLast() // -> [0,1,2]
```
##指定した配列の要素を削除する
####PHP

```php
$array = [0,1,2,3];
unset($array[2]);
print_r(array_values($array)); // -> [0,1,3]
```

####Swift
ArrayクラスのremoveAtIndexメソッドを使う。
removeAtIndexメソッドで削除位置を指定する。

```swift 
var array = [0,1,2,3]
array.removeAtIndex(2) // -> [0,1,3]
```

##配列の先頭に要素を加える
####PHP

```php
$array = [0,1,2,3];
$val = 100;
array_unshift($array,$val);
print_r($array); // -> [100,0,1,2,3];
```
####Swift
配列の先頭に要素を追加する場合はArrayクラスのinsertメソッドを使う。

```swift
var array = [0,1,2,3]
array.insert(100, atIndex : 0) // -> [100,0,1,2,3]
```

##範囲を指定して要素を削除する
####PHP

```php
$array = ["mars","moon","earth","venus"];
array_splice($array,1,1);
print_r($array); // -> ["mars","earth","venus"]
```

####Swift
配列から範囲を指定して複数の要素を削除するには、removeRangeメソッドを使う。
引数には範囲を表すRangeオブジェクトを使用し指定する。

```swift
var array = ["mars","moon","earth","venus"]
array.removeRange(Range<Int>(start: array.startIndex + 1, end: array.startIndex + 2)) // -> ["mars","earth","venus"]
```

##配列から要素を指定して削除する
####PHP

```php
$array = ["mars","moon","earth","venus"];
$cnt = array_search("earth",$array);
array_splice($array,$cnt,1);
print_r($array); // -> ["mars","moon","venus"]
```

####Swift
removeAtIndexメソッドとindexOfメソッドを使うパターン

```swift
var array = ["mars","moon","earth","venus"]
array.removeAtIndex(array.indexOf("earth")!) // -> ["mars","moon","venus"]
```

filterメソッドを使うパターン
指定した要素以外の配列を作る

```swift
var array = ["mars","moon","earth","venus"]
var filterArray = array.filter({$0 != "earth"}) // -> ["mars","moon","venus"]
```

##配列の要素のインデックスを取得する
####PHP

```php
$array = ["mars","moon","earth","venus"];
$index = array_search("earth",$array);
print_r($index); // -> 2
```

####Swift
indexOfメソッドは要素を指定して、見つかった要素のインデックスを返す。

```swift
var array = ["mars","moon","earth","venus"]
var index = array.indexOf("earth") // -> 2
```

##配列の順序をソートする
####PHP

```php
//昇順
$array = [3,4,5,7,1,9];
sort($array,SORT_NUMERIC);
print_r($array);　// -> [1,3,4,5,7,9]
//降順
$array = [3,4,5,7,1,9];
rsort($array,SORT_NUMERIC);
print_r($array);　// -> [9,7,5,4,3,1]
```

####Swift
sort関数にクロージャを渡すことによって、数値などを昇順や降順にソートできる。
クロージャの記述は\$0,$1のように引数名を省略する方法と「i1 : Int」のように引数名を記述する方法がある。

```swift
var array = [3,4,5,7,1,9]
//昇順　引数名を記述する場合
var ascendingOrderArray = array.sort {(i1 : Int, i2 : Int) -> Bool in
 return i1 < i2
} // -> [1,3,4,5,7,9]
/*
昇順　引数名を省略する場合
var ascendingOrderArray = array.sort({$0 < $1})  -> [1,3,4,5,7,9]
*/

//降順　引数名を記述する場合
var descendingOrderArray = array.sort {(i1 : Int, i2 : Int) -> Bool in
 return i1 > i2
} // -> [9,7,5,4,3,1]
/*
降順　引数名を省略する場合
var descendingOrderArray = array.sort({$0 > $1}) -> [9,7,5,4,3,1]
*/
```

##配列の順序を反転する
####PHP

```php
$array = ["mars","moon","earth"];
$reversed = array_reverse($array);
print_r($reversed); // -> ["earth","moon","mars"]
```

####Swift
reverseメソッドを使う。

```swift
var array = ["mars","moon","earth"]
var reversedArray = array.reverse() // -> ["earth","moon","mars"]
```

##配列をフィルタリングする
####PHP

```php
function even($num)
{
    return($num % 2 == 0);
}
$array = [0,1,2,3,4,5,6,7,8,9,10];
print_r(array_filter($array, "even")); // -> [0,2,4,6,8,10]
```

####Swift
filterメソッドを使う。

```swift
var array = [0,1,2,3,4,5,6,7,8,9,10]
//偶数のみを取り出す
var evenArray = array.filter{(num : Int) -> Bool in
 return num % 2 == 0
} // -> [0,2,4,6,8,10]
/*
クロージャを省略すると
var evenArray = array.filter({num in num % 2 == 0}) // -> [0,2,4,6,8,10]
*/
```

#おわりに
ざっくりとまとめましたが、PHPと比較するとSwiftではこんな感じで書くんだな程度で参考にして頂いて、少しでもSwiftに興味をもってもらえたら嬉しいです:smiley:
次回は文字列操作編を投稿しようと考えています。お楽しみに！