Ответ 1
Это еще проще:
[mutableArrayOfStrings removeObject:@""];
Если ваш массив не изменен, вам нужно создать mutableCopy
раньше.
removeObject:
удаляет все объекты из массива, которые возвращают YES из isEqual:
.
В PHP это одна строка кода:
$array_without_empty_strs = array_filter($array_with_empty_strs);
Каков объективный C-эквивалент?
UPDATE - добавлен следующий тестовый код, чтобы проиллюстрировать использование решения Nikolai Ruhe:
// SOLUTION Test Code
NSMutableArray *myArray = [[NSMutableArray alloc] init ];
[myArray addObject:[NSNumber numberWithInt:5]];
[myArray addObject:@""];
[myArray addObject:@"test"];
NSLog(@"%@", myArray);
[myArray removeObject:@""];
NSLog(@"%@", myArray);
// SOLUTION Test Code Output
2012-07-12 08:18:16.271 Calculator[1527:f803] (
5,
"",
test
)
2012-07-12 08:18:16.273 Calculator[1527:f803] (
5,
test
)
Это еще проще:
[mutableArrayOfStrings removeObject:@""];
Если ваш массив не изменен, вам нужно создать mutableCopy
раньше.
removeObject:
удаляет все объекты из массива, которые возвращают YES из isEqual:
.
NSArray *noEmptyStrings = [maybeEmptyStrings filteredArrayUsingPredicate:
[NSPredicate predicateWithFormat:@"length > 0"]];
мы можем использовать NSPredicate здесь мой код
NSPredicate *pred = [NSPredicate predicateWithBlock:^BOOL(id str, NSDictionary *unused) {
return ![str isEqualToString:@""];
}];
NSArray *filtered = [yourArray filteredArrayUsingPredicate:pred];
Посмотрите этот вопрос, который почти точно совпадает с вашим.
Я использую этот метод для нестроковых (объектных) случаев, которые не работают с NSPredicate
Где массив NSMutableArray
- (void) clearArrayOut
{
for (int j=[array count]-1; j>=0; j--)
if ([[array objectAtIndex:j] length] == 0)
[array removeObjectAtIndex:j];
}
И я полностью просто украл это из rob mayoff красивый ответ на мой вопрос NSPredicate вместо цикла для фильтрации массива объектов
Здесь альтернативный метод, который более гибкий, чем использование предиката.
NSArray* filteredArray = [arrayToFilter objectsWithIndexes:
[arrayToFilter indexesOfObjectsPassingTest:
^((id obj, NSUInteger idx, BOOL *stop)
{
return [obj length] > 0;
}]];