Closed krsakai closed 7 years ago
配列クラスには中のデータを操作するにあたって、便利なメソッドが用意されている
filter >> 条件に一致した物だけ返却(filter)する map >> 要素を取り出して、その要素から新しい配列を作り出す reduce >> 要素をひとつにまとめる sorted >> 要素の比較で中身を整列して返却する forEach >> 要素数分ループする
参考サイト→ http://qiita.com/FuruyamaTakeshi/items/6f7c271a28720cb1d096
おもに配列を扱う便利なmap, filter, reduceを使わない例と対比します。
map, filter, reduce
ある配列から各要素に対して自乗し、新しい配列を作りたい!
varを使いappend()する方法
var
append()
func square(x: Int) -> Int { return x * x } var a = [1, 2, 3, 4, 5] var b = [Int]() for x in a { b.append(square(x)) }
func square(x: Int) -> Int { return x * x } let a = [1, 2, 3, 4, 5] let b = a.map { x in square(x) }
関数を引数とするケース
func square(x: Int) -> Int { return x * x } let a = [1, 2, 3, 4, 5] let b = a.map(square) // [1, 4, 9, 16, 25]
ここでショートハンド引数を使用。1行で書ける。
[1, 2, 3, 4, 5].map { $0 * $0 } // [1, 4, 9, 16, 25]
15より大の配列もfilter使うととても簡略に書ける!
filter
[1, 2, 3, 4, 5].map { $0 * $0 }.filter { $0 > 15 } // [16, 25]
ある条件を満たすオブジェクトを配列に追加するケース
gradeが90より大のStudentオブジェクトの一覧 (bestStudents)が欲しい!
var bestStudents = [Student]() for student in students { if student.grade > 90 { bestStudents.append(student) } }
ここでショートハンド引数を使用。簡潔になる。
let besetStudents = students.filter { $0.grade > 90 }
引数として関数を渡すケース。
func isBestStudent(student: Student) -> Bool { return student.grade > 90 } let bestStudents = students.filer(isBestStudent)
配列の要素を畳み込む。
1,2,3,4,5を要素に持つ配列の要素を積み上げ、その総和を求めたい!
varを使い、for inで積み上げる。
let a = [1, 2, 3, 4, 5] var sum = 0 for x in a { sum += x }
リストの畳込み時は、reduceを使う。
let a = [1, 2, 3, 4, 5] let sum = a.reduce(0) { (total, value) in return total + value }
初期値0が下表#1のtotalになり、resultが次iterationの(#1...5それぞれ)のtotalになる。
0
ここでショートハンド引数を使用。
let a = [1, 2, 3, 4, 5] let sum = a.reduce(0) { $0 + $1 } // 15
+が渡せる!
+
let a = [1, 2, 3, 4, 5] let sum = a.reduce(0, combine: +) // 15
配列クラスの便利メソッドについて
配列クラスには中のデータを操作するにあたって、便利なメソッドが用意されている
基本的な種類
filter >> 条件に一致した物だけ返却(filter)する map >> 要素を取り出して、その要素から新しい配列を作り出す reduce >> 要素をひとつにまとめる sorted >> 要素の比較で中身を整列して返却する forEach >> 要素数分ループする
基本的な使い方
参考サイト→ http://qiita.com/FuruyamaTakeshi/items/6f7c271a28720cb1d096
おもに配列を扱う便利な
map, filter, reduce
を使わない例と対比します。map
お題
ある配列から各要素に対して自乗し、新しい配列を作りたい!
宜しくない書き方
var
を使いappend()
する方法mapヲ使用スベシ1
mapヲ使用スベシ2
関数を引数とするケース
mapヲ使用スベシ3
ここでショートハンド引数を使用。1行で書ける。
15より大の配列も
filter
使うととても簡略に書ける!filter
ある条件を満たすオブジェクトを配列に追加するケース
お題
gradeが90より大のStudentオブジェクトの一覧 (bestStudents)が欲しい!
宜しくない書き方
var
を使いappend()
する方法filterヲ使用スベシ1
ここでショートハンド引数を使用。簡潔になる。
filterヲ使用スベシ2(関数を渡す)
引数として関数を渡すケース。
reduce
配列の要素を畳み込む。
お題
1,2,3,4,5を要素に持つ配列の要素を積み上げ、その総和を求めたい!
宜しくない書き方
var
を使い、for inで積み上げる。reduceヲ使用スベシ1
リストの畳込み時は、reduceを使う。
解説
初期値
0
が下表#1のtotalになり、resultが次iterationの(#1...5それぞれ)のtotalになる。reduceヲ使用スベシ2
ここでショートハンド引数を使用。
reduceヲ使用スベシ3
+
が渡せる!