从NSMutableArray中删除具有相同值的元素

时间:2017-08-08 06:31:32

标签: objective-c nsmutablearray nsobject

我的NSMutableArray包含一些字符串作为元素。其中一个元素在数组中的不同索引处重复多次。例如[@"", @"1,2,3",@"",@"5,3,2,1",@""]。 我想从可变数组中删除值为@""的所有元素。我尝试了以下方法,但无法得到解决方案。

  1. 使用For循环:

    for(id obj in myMutableArray)
    {
        if([obj isEqualToString:@""])
        {
            [myMytableArray removeObject:obj];
        }
    } 
    
  2. 使用名为nextMutableArray

    的虚拟可变数组
    for(id obj in myMutableArray)
    {
        if([obj isEqualToString:@""])
        {
            continue;
        }
        else [nextMutableArray addObject:obj];
    }
    
  3. 在这两种方式中,其他索引处的元素(@"")将被删除,但不会删除索引0(第一个对象)。可能的原因是什么?有没有办法从可变数组中删除包含字符串@""的所有元素?

3 个答案:

答案 0 :(得分:6)

一个选项是使用谓词过滤数组:

NSArray *someArray = @[@"", @"1,2,3", @"", @"5,3,2,1", @""];
NSLog(@"%@", someArray);
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF != ''"];
NSArray *filteredArray = [someArray filteredArrayUsingPredicate:predicate];
NSLog(@"%@", filteredArray);

答案 1 :(得分:0)

不需要For循环。只需使用它。

[mutableArray removeObjectIdenticalTo:@""];

答案 2 :(得分:0)

如果要从数组中删除重复的条目,可以使用NSSet Class。 NSSet不接受重复/ s值。

NSMutableArray *arrTest=[[NSMutableArray alloc]initWithObjects:@"", @"1,2,3",@"",@"5,3,2,1",@"", nil];
NSSet *set = [NSSet setWithArray:arrTest];
arrTest = [[set allObjects] mutableCopy];

或 你可以这样做:

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

这是一种快速而简单的方法。