- 데이터를 추출하고자 할 때 사용
- 기존 컨테이너에서 내부 값을 걸러 새로운 컨테이너 생성
- 기본 형태 :
array.filter(value: T throws -> T)
- T타입의 value를 받아서 T형태의 컨테이너를 생성
- filter는 단어 뜻 그대로 내부의 값들을 걸러서 추출하는 역할
- map과 마찬가지로 새로운 컨테이너에 걸러진 값들을 담아 반환
- map은 기존의 요소를 변경한 값을 반환했다면 filter는 기준을 가지고 기준에 맞는 값들을 반환해준다.
for-in과 filter의 비교 1
let stringArray = ["가수", "대통령", "선생님", "의사", "야곰", "코다"]
var twoStringArray = [String]()
for string in stringArray {
if string.count == 2{
twoStringArray.append(string)
}
}
let stringArray = ["가수", "대통령", "선생님", "의사", "야곰", "코다"]
let twoCountArray = stringArray.filter{ $0.count ==2 }
for-in과 filter의 비교 1
var filtered: [Int] = [0, 1, 2, 3, 4]
for number in numbers {
if number % 2 == 0 {
filtered.append(number)
}
}
filter의 활용 1
let evenNumbers: [Int] = numbers.filter { (number: Int) -> Bool in
return number % 2 == 0
}
print(evenNumbers)
let oddNumbers: [Int] = numbers.filter {
$0 % 2 != 0
}
print(oddNumbers)
filter의 활용 2
let sumArray = [10, 3, 20, 15, 4]
var filtered = swumArray.filter { $0 > 5 }.sorted()
filter와 맵의 활용
let sumArray = [10, 3, 20, 15, 4]
.filter { $0 > 5 }
.map { $0 * 100 }
var add: (Int, Int)-> Int = { (num1:Int, num2:Int) in
return num1 + num2
}
var sub: (Int, Int)-> Int = { (num1:Int, num2:Int) in
return num1 - num2
}
func cal(num1:Int, num2:Int , op: (Int, Int) -> Int ) -> Int {
return op(num1, num2)
}
print(cal(num1: 4, num2: 4, op: add))
func decideFunc(feet: Bool) -> (Int, Int) -> Int {
if feet {
return add
} else {
return sub
}
}
let function = decideFunc(feet: false)
print(function(4,5))