【Swift】コレクションに関する処理

  • for -in- > 終了値を含まない
for i in 1..<4 {
    print("i: \(i)")
}
=>
i: 1
i: 2
i: 3
  • for -in- > 終了値を含む
for i in 1...4 {
    print("i: \(i)")
}
=>
i: 1
i: 2
i: 3
i: 4
  • for-in コレクション
let arrayData = [3, 5, 8, 10]

for data in arrayData {
    print("data: \(data)")
}

=>
// 【結果】
// data: 3
// data: 5
// data: 8
// data: 10
  • forEach  要素に対して順次アクセスする。戻り値はVoid。
let array = [1,2,3,4]
var addedArray = [] as [Int]

array.forEach({ element in addedArray.append(element * 2) })

print(addedArray)

=> [2, 4, 6, 8]
  • filter 要素を絞り込む。指定された条件に合致する要素だけのシーケンスを返す。
let array = [1,2,3,4]
let filtered = array.filter({element in element % 2 == 0})

print(filtered)
=> [2, 4]
  • map 要素を変換してそれらのシーケンスを返す。
let array = [1,2,3,4]
print(array.map({element in element * 2}))
print(array.map({element in String(element)}))

=>
[2, 4, 6, 8]
["1", "2", "3", "4"]
  • flatMap 要素をシーケンスに変換して、さらに一つのシーケンスに連結する。
let array = [1,2,3,4]

print(array.flatMap({value in [value, value + 1]}))

=>[1, 2, 2, 3, 3, 4, 4, 5]
  • compactMap nilや変換できない要素を無視して、シーケンスに変換する
let optionalNumberList: [Int?] = [1, 2, nil, 4, 5, nil]
print(optionalNumberList.compactMap { $0 })
=>
[1, 2, 4, 5]


let strings = ["1", "2", "3", "abc"]
print(strings.compactMap({value in Int(value)}))

=>
[1, 2, 3]
  • reduce 要素をまとめる
let array = [1,2,3,4,5]
let sum = array.reduce(0, {result, element in result + element})

print(sum)
=>
15
let array = [1,2,3,4,5]

print(array.isEmpty)
print(array.count)
print(array.first)
print(array.last)

=>
false
5
1
5
  • String.Index 文字の位置を示す。 以下のようにして文字にアクセスできる。
let string = "abcde78"
print(string[string.startIndex])
=> 
a

// endIndexには注意が必要。これ自体は最後の文字の次のインデックスを返す。故に前に1ずらす。
let lastIndex = string.index(string.endIndex, offsetBy: -1)
print(string[lastIndex])
=> 8
  • for...where whereで条件を指定。条件に合致するものだけ、ループの中で実行される。
for i in 0...9 where i % 2 == 0 {
    print(i)
}

=>
0
2
4
6
8