我的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(第一个对象)。可能的原因是什么?有没有办法从可变数组中删除包含字符串@""
的所有元素?
答案 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];
这是一种快速而简单的方法。