在PHP中,它是一行代码:
$array_without_empty_strs = array_filter($array_with_empty_strs);
目标C等价物是什么?
更新 - 添加以下测试代码以说明使用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
)
答案 0 :(得分:61)
更简单:
[mutableArrayOfStrings removeObject:@""];
如果您的数组不可变,则必须先创建mutableCopy
。
removeObject:
从isEqual:
返回YES的数组中删除所有对象。
答案 1 :(得分:23)
NSArray *noEmptyStrings = [maybeEmptyStrings filteredArrayUsingPredicate:
[NSPredicate predicateWithFormat:@"length > 0"]];
答案 2 :(得分:3)
我们可以使用NSPredicate 这是我的代码
NSPredicate *pred = [NSPredicate predicateWithBlock:^BOOL(id str, NSDictionary *unused) {
return ![str isEqualToString:@""];
}];
NSArray *filtered = [yourArray filteredArrayUsingPredicate:pred];
答案 3 :(得分:1)
看看this question,这与你的几乎完全相同。
我将此方法用于不适用于NSPredicate
数组是NSMutableArray
- (void) clearArrayOut
{
for (int j=[array count]-1; j>=0; j--)
if ([[array objectAtIndex:j] length] == 0)
[array removeObjectAtIndex:j];
}
我完全从我的问题NSPredicate instead of loop to filter an array of objects
中偷走了梅奥夫的漂亮答案答案 4 :(得分:1)
这是一种替代方法,甚至比使用谓词更灵活。
NSArray* filteredArray = [arrayToFilter objectsWithIndexes:
[arrayToFilter indexesOfObjectsPassingTest:
^((id obj, NSUInteger idx, BOOL *stop)
{
return [obj length] > 0;
}]];