티스토리 뷰
스위프트4.2 버전에서 나왔던 removeAll이랑 기존에 있던 filter는 비슷한 역할을 합니다.
removeAll(where: ) method that performs a high-performance, in-place filter for collections.
You give it closure condition to run, and it will strip out all objects that match the condition.
즉 removeAll(where: ) 메서드는 컬렉션에 대해서 고성능인 in-place filter를 수행합니다.
클로저에 필요한 조건을 주고 조건에 일치하는 모든 객체들을 제거할 것입니다.
여기서 in-place는 그 자리에서라는 의미로 removeAll을 하게 되면 그 자리에서 제거를 합니다.
in-place filter라는 단어가 removeAll(where: ) 메서드를 가장 잘 나타내는 키워드 같습니다.
[사용하기]
1. removeAll
[Int]인 scores변수를 선언했습니다.
removeAll의 클로저에 원하는 상태 값을 입력합니다.
'83점을 지울래' 조건을 설정해줍니다.
그러면 $0가 83인 object는 제거됩니다.
여기서 scores를 상수인 let으로 선언하지 않은 이유는 in-place라 scores에 있는 83을 제거합니다.
즉 scores가 변경되기 때문에 let이 아닌 var을 사용해야 합니다.
그렇기 때문에 여분의 복사본을 만들지 않습니다.
2. filter
위와 같이 scores.filter { $0 != 83 } 이라 하지 않고 리턴 받을 배열을 받아줄 newScores을 선언해주었습니다.
그 이유는 filter는 복사본을 만들어 리턴합니다.
즉 83을 제외한 나머지를 새로 만들어 newScores에 넣어줍니다.
print 문을 찍어낸 scores와 newScores는 같은 값인 [226,11,42,124] 을 출력합니다.
위 두개는 비슷한 역할을 하지만 차이점 또한 존재합니다.
차이점 1 )
removeAll(where: )은 제거할 상태를 적습니다.
예를 들어 83인 값을 제거할 거야.
{ $0 == 83 }
filter()은 제거하지 않을 상태를 적습니다.
예를 들어 83인 값을 제거할 거야.
{ $0 != 83 }
removeAll이 내가 무엇을 제거할지 표시하기 때문에 조금 더 직관적입니다.
차이점 2 )
removeAll(where: )은 그 자리에서 object를 제거하기 때문에 불필요한 복사를 피합니다.
filter()은 제거보단 걸러내는 느낌입니다. 상태에 맞게 걸러내 복사한 값을 배열로 리턴합니다.
'Tech > Swift' 카테고리의 다른 글
Swift functions abs,assert,assertionFailure (0) | 2019.03.07 |
---|---|
Swift - Array shuffle() (2) | 2019.02.13 |
스위프트 zip 사용하기 (0) | 2019.01.02 |
스위프트 map , forEach (0) | 2018.12.22 |
스위프트 오버로드 오버라이딩 (0) | 2018.12.19 |
- Total
- Today
- Yesterday
- ARC
- 애니메이션
- Deep learning
- 딥러닝
- 알고리즘
- Animation
- iOS SwiftUI
- swiftUI
- objc
- 독서
- wwdc
- string
- 스위프트
- RX
- rxswift
- 책 후기
- objective-c
- swift5
- 문자열
- ios
- 책 추천
- Algorithm
- Xcode
- SWIFT
- 머신러닝
- 책
- leetcode
- 스위프트UI
- stanford SwiftUI
- ReactiveX
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |