2013-05-31 4 views
2

문자열이 포함 된 배열이 있습니다. 이 문자열 중 일부는 비어있을 수 있습니다 (@ ""). 술어는 어떻게 배열을 필터링하고 비어 있지 않은 문자열 만 포함하는 새 문자열을 반환해야합니다.NSPredicate를 사용하는 NSArray 필터

배열 A : { "A", "B", ""D "} -> FILTER -> 배열 B :

배열 A : : { "A", "B", "D"}

하고이를 반환해야 { "", "", "", ""} -> FILTER -> Array B : {}

답변

10

NSString의 배열을 필터링하는 경우 술어 SELF != ''을 사용하십시오. 이는 빈 문자열과 정확히 같지 않은 모든 NSString과 일치합니다.

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF != ''"]; 
NSArray *filteredArray = [array filteredArrayUsingPredicate:predicate]; 

예제 코드 :

NSArray *array = @[@"A", @"B", @"", @"C", @"", @"D"]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF != ''"]; 
NSArray *filteredArray = [array filteredArrayUsingPredicate:predicate]; 
NSLog(@"Input array: %@\nFiltered array: %@", [array componentsJoinedByString:@","], [filteredArray componentsJoinedByString:@","]); 

이 출력을

Input array: A,B,,C,,D 
Filtered array: A,B,C,D 

편집을 제공합니다 : 요리스 Kluivers 술어 형식 length > 0와 솔루션을 기록했다. 빈 문자열을 제거하는 것이 더 빠른 해결책 일 수 있습니다.

+0

작품 : – DanielR

-1
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF beginswith[c]%@",searchText]; 

[arrSearched removeAllObjects]; 

[arrSearched addObjectsFromArray:[self.arrContent filteredArrayUsingPredicate:predicate]]; 

여기서 arrContent는 원래 배열이고 arrSearched는 검색 후 출력 배열입니다. 문자열의 길이

7

확인 : 마법처럼 ("A", "B", "C")

+0

+1 니스 솔루션은이 일에 대해 알고하지 않았다 필요한 배열의

NSArray *values = @[@"A", @"B", @"", @"D"]; NSPredicate *filterPredicate = [NSPredicate predicateWithFormat:@"length > 0"]; NSArray *filteredValues = [values filteredArrayUsingPredicate:filterPredicate]; 

결과. 아마도 빈 문자열을 비교하는 내 솔루션보다 훨씬 빠를 것입니다. 귀하의 답변을 언급 한 내 대답을 편집했습니다 ;-) –

관련 문제