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

Removing elements with same value from NSMutableArray

我的 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];
    }
    

在这两种方式中,其他索引处的元素 (@"") 都会被移除,但不会移除索引 0(第一个对象)处的元素。可能的原因是什么?有没有办法从可变数组中删除所有包含字符串 @"" 的元素?

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

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

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

[mutableArray removeObjectIdenticalTo:@""];

如果要从数组中删除重复项,可以使用 NSSet Class。 NSSet 不接受 duplicate/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];

这种方法既快速又简单。