从NSArray中删除空NSStrings的最简单方法是什么?

时间:2012-07-11 18:37:02

标签: iphone objective-c

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

5 个答案:

答案 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;
                                 }]];