Filter

Martin·2023년 2월 18일

TIL 아카이브

목록 보기
3/11
  • 데이터를 추출하고자 할 때 사용
  • 기존 컨테이너에서 내부 값을 걸러 새로운 컨테이너 생성
  • 기본 형태 : 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)
    }
}
// twoStringArray = ["의사", "야곰", "코다"]

let stringArray = ["가수", "대통령", "선생님", "의사", "야곰", "코다"]
let twoCountArray = stringArray.filter{ $0.count ==2 }
// twoStringArray = ["의사", "야곰", "코다"]

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

// numbers의 요소 중 짝수를 걸러내어 새로운 배열로 반환
let evenNumbers: [Int] = numbers.filter { (number: Int) -> Bool in
    return number % 2 == 0
}
print(evenNumbers) // [0, 2, 4]

// 매개변수, 반환 타입, 반환 키워드(return) 생략, 후행 클로저
let oddNumbers: [Int] = numbers.filter {
    $0 % 2 != 0
}
print(oddNumbers) // [1, 3]

filter의 활용 2

let sumArray = [10, 3, 20, 15, 4]
var filtered = swumArray.filter { $0 > 5 }.sorted() 
// 10 15 20

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))
// +, - 등등 연산자는 기존에 정의 돼있는 함수가 있다. add()대신 '+'사용가능

func decideFunc(feet: Bool) -> (Int, Int) -> Int {
    if feet {
        return add
    } else {
        return sub
    }
}

let function = decideFunc(feet: false)
print(function(4,5))
profile
제로부터 시작하는 이세계 Swift

0개의 댓글