2013-05-31 3 views
2

У меня есть массив, который содержит строки. Некоторые из этих строк могут быть пустыми (@ ""). Как предикат должен выглядеть так, чтобы он фильтровал массив и возвращал новый, содержащий только непустые строки:Фильтр NSArray с использованием NSPredicate

Array A: {"A", "B", "", "D"} -> ФИЛЬТР -> Массив B: { "A", "B", "D"}

и он также должен вернуть это:

массива A: { "", "", "", ""} -> FILTER -> Array B: {}

ответ

10

Использовать предикат SELF != '', если вы фильтруете только массив из NSString s. Это соответствует каждому 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

Проверка на длину строк:

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

NSArray *filteredValues = [values filteredArrayUsingPredicate:filterPredicate]; 

Результаты в требуемом массиве ("A", "B", "C")

+0

+1 Nice решение, не знал об этом. Вероятно, будет намного быстрее, чем мое решение, сравнивающее пустую строку. Я отредактировал свой ответ, в котором упоминается ваш ответ ;-) –

Смежные вопросы