LoginSignup
1
1

More than 3 years have passed since last update.

swiftのシーケンスとコレクションを扱うためのプロトコル 超初心者のメモ

Posted at

シーケンスとコレクションを扱うためのプロトコル

シーケンスとはその要素に一方向から順次アクセス可能なデータ構造です。
例えば、配列は先頭のインデックスから要素に順次アクセスできるため、シーケンスの一種であると言えます。
標準ライブラリにはシーケンスを汎用的に扱うためにSequenceプロトコルが用意されています。

コレクションは、一方向からの順次アクセスと、特定のインデックスの値への直接アクセスが可能なデータ構造です。
機能の差からわかるように、コレクションはシーケンスを内包する概念です。

Sequenceプロトコルは、次のインターフェースを提供します。
forEach
filter
map
flatMap
compactMap
reduce

使い方の例

filter
指定した条件を満たす要素のみを含む、新しいシーケンスを返すメソッドです。

let array  = [1, 2, 3, 4, 5]
let enumerated2 = array.filter({e in e % 2 == 0})
print(enumerated2) // 2, 4

compactMap
compactMapは全ての要素を特定の処理で変換するという点ではmapメソッドと同じですが、変換できない値を無視するという点が異なります。

let strings = ["foo", "123", "bar", "456"]
let integers = strings.compactMap({value in Int(value)})
print(integers)

結果は、変換に成功した123と456のみを含むInt型の配列です。変換に失敗した"foo"や"bar"は無視された事がわかります。

Collectionプロトコルは、Sequenceプロトコルを継承しています。
そのため、Collectionプロトコルにい準拠する型に対しては、Sequenceプロトコルが提供するfilterや、mapを使用可能です。

let array = [1, 2, 3, 4, 5]
array[3] // 4
array.isEmpty // false
array.count // 5
array.first // 1
array.last // 5
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1