배열을 필터하기
특정한 값을 만족하는 원소만을 추출하여 부분 집합을 구하는 작업을 종종 해야 할 때가 있다. 배열에 대한 정렬 보다 간단하다면 간단하고 어렵다면 어려운데, predicate를 사용하면 쉽게 추출이 가능한데, 이 predicate를 사용하는 문법이 별도로 존재하기 때문에 조금 성가실 수 있다. (하지만 영문법과 크게 다르지 않다)
NSMutaleArray *array = [NSMutableArray arrayWithObjects:@"Bill", @"Ben", @"Chris", @"Melisa", nil]; NSPredicate *bPredicate = [NSPredicate predicateWithFormat:@"SELF beginsWith:'b'"]; NSArray *beginWithB = [array filteredArrayUsingPredicate:bPredicate]; // ==> { @"Bill", @"Ben" }
predicate는 너무 깊이 파면 복잡하므로 일종의 쿼리문이며, 대략 다음과 같은 포맷과 문법이 있다고 알아두자.
- %@ : 하나의 객체로 치환한다.
- %K : 하나의 문자열로 치환한다. 이는 비교하고자 하는 키패스가 된다.
- = / == : 두 항이 같다.
- >= / => : 왼쪽이 크거나 같다.
- <= / =< : 오른쪽이 크거나 같다.
- > : 왼쪽이 크다
- < : 오른쪽이 크다.
- != / <> : 같지 않다.
- BETWEEN : 사이에 있다 – 1 BETWEEN {0,3}
- TRUEPREDICATE : 항상 TRUE
- FALSEPREDICATE : 항상 FALSE
- AND / && : 논리곱
- OR / || : 논리합
- NOT / ! : 논리 부정
- 문자열 비교시 [cd] 토큰 : c는 대소문자구분하지 않음, d는 공백등을 무시
- BEGINSWITH : 첫글자가 ~로 시작함
- ENDSWITH : 마지막이 ~로 끝남
- CONTAINS : ~를 포함함
- LIKE : ~와 유사함
- MATCHES : 정규식을 사용함
- IN : 비교항이 특정 집합에 포함됨
언제나 그렇지만 자세한 내용은 개발자 문서를 참고하면 된다.