17

在 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
)
4

5 回答 5

62

它更简单:

[mutableArrayOfStrings removeObject:@""];

如果您的数组不可变,则必须先创建一个mutableCopy

removeObject:从数组中删除所有isEqual:返回 YES 的对象。

于 2012-07-12T08:18:06.263 回答
26
NSArray *noEmptyStrings = [maybeEmptyStrings filteredArrayUsingPredicate:
    [NSPredicate predicateWithFormat:@"length > 0"]];
于 2012-07-11T18:42:37.790 回答
4

我们可以在这里使用 NSPredicate 我的代码

NSPredicate *pred = [NSPredicate predicateWithBlock:^BOOL(id str, NSDictionary *unused) {
            return ![str isEqualToString:@""];
        }];

        NSArray *filtered = [yourArray filteredArrayUsingPredicate:pred];
于 2016-07-01T11:07:08.667 回答
1

看看这个问题,和你的几乎一模一样。

我将此方法用于不适用的非字符串(对象)情况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 的漂亮回答中偷走了这个,而不是循环来过滤对象数组

于 2012-07-11T18:41:03.537 回答
1

这是一种替代方法,它甚至比使用谓词更灵活。

NSArray* filteredArray = [arrayToFilter objectsWithIndexes: 
                              [arrayToFilter indexesOfObjectsPassingTest: 
                                 ^((id obj, NSUInteger idx, BOOL *stop)
                                 {
                                     return [obj length] > 0;
                                 }]];
于 2012-07-11T19:28:56.880 回答