Edited at
HameeDay 16

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

More than 3 years have passed since last update.


はじめに

これはHamee Advent Calendar 2015の16日目の記事です。

この記事では、PHPがある程度触れている人向けに、Swiftではこんな感じで書きますよというのをざっくりとまとめてあります。

今回は、配列操作に絞ってお送りしたいと思います。


配列の要素数を取得する


PHP

$array = [0,1,2,3];

count($array); // -> 4


Swift

var array = [0,1,2,3]

var arrayCount = array.count // -> 4


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


PHP

$array = [0,1,2,3]

array_push($array,4) // -> [0,1,2,3,4]


Swift

var array = [0,1,2,3]

array.append(4) // -> [0,1,2,3,4]


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


PHP

$array = [0,1,2,3];

array_splice($array,0,count($array));
print_r($array); // ->[]


Swift

var array = [0,1,2,3]

array.reomoveAll // -> []


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


PHP

$array = [0,1,2,3]

array_shift($array) // -> [1,2,3]


Swift

var array = [0,1,2,3]

array.removeFirst() // -> [1,2,3]


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


PHP

$array = [0,1,2,3]

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


Swift

var array = [0,1,2,3]

array.removeLast() // -> [0,1,2]


指定した配列の要素を削除する


PHP

$array = [0,1,2,3];

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


Swift

ArrayクラスのremoveAtIndexメソッドを使う。

removeAtIndexメソッドで削除位置を指定する。

var array = [0,1,2,3]

array.removeAtIndex(2) // -> [0,1,3]


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


PHP

$array = [0,1,2,3];

$val = 100;
array_unshift($array,$val);
print_r($array); // -> [100,0,1,2,3];


Swift

配列の先頭に要素を追加する場合はArrayクラスのinsertメソッドを使う。

var array = [0,1,2,3]

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


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


PHP

$array = ["mars","moon","earth","venus"];

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


Swift

配列から範囲を指定して複数の要素を削除するには、removeRangeメソッドを使う。

引数には範囲を表すRangeオブジェクトを使用し指定する。

var array = ["mars","moon","earth","venus"]

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


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


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メソッドを使うパターン

var array = ["mars","moon","earth","venus"]

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

filterメソッドを使うパターン

指定した要素以外の配列を作る

var array = ["mars","moon","earth","venus"]

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


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


PHP

$array = ["mars","moon","earth","venus"];

$index = array_search("earth",$array);
print_r($index); // -> 2


Swift

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

var array = ["mars","moon","earth","venus"]

var index = array.indexOf("earth") // -> 2


配列の順序をソートする


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」のように引数名を記述する方法がある。

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

$array = ["mars","moon","earth"];

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


Swift

reverseメソッドを使う。

var array = ["mars","moon","earth"]

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


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


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メソッドを使う。

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:

次回は文字列操作編を投稿しようと考えています。お楽しみに!