17

PHP では、1 行のコードです。

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

5 に答える 5

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

これは、述語を使用するよりも柔軟な代替方法です。

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

この質問を見てください。これはあなたのものとほぼ同じです。

このメソッドは、動作しない非文字列 (オブジェクト) の場合に使用しますNSPredicate

配列の場所NSMutableArray

- (void) clearArrayOut
{

    for (int j=[array count]-1; j>=0; j--)
        if ([[array objectAtIndex:j] length] == 0)
            [array removeObjectAtIndex:j];
}

そして、オブジェクトの配列をフィルタリングするためのループの代わりに、NSPredicateの質問に対する rob mayoff の美しい答えからこれを完全に盗みました

于 2012-07-11T18:41:03.537 に答える