从 NSMutableArray 中删除具有相同值的元素
Removing elements with same value from NSMutableArray
我的 NSMutableArray
包含一些字符串作为元素。其中一个元素在数组中的不同索引处重复多次。例如 [@"", @"1,2,3",@"",@"5,3,2,1",@""]
。
我想从可变数组中删除所有值为 @""
的元素。我尝试了以下方法,但无法得到解决方案。
使用 For 循环:
for(id obj in myMutableArray)
{
if([obj isEqualToString:@""])
{
[myMytableArray removeObject:obj];
}
}
使用名为 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];
这种方法既快速又简单。
我的 NSMutableArray
包含一些字符串作为元素。其中一个元素在数组中的不同索引处重复多次。例如 [@"", @"1,2,3",@"",@"5,3,2,1",@""]
。
我想从可变数组中删除所有值为 @""
的元素。我尝试了以下方法,但无法得到解决方案。
使用 For 循环:
for(id obj in myMutableArray) { if([obj isEqualToString:@""]) { [myMytableArray removeObject:obj]; } }
使用名为
的虚拟可变数组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];
这种方法既快速又简单。