亲爱的。我们有2个数组(currentCarriers和带有字符串的companyList。最终的解决方案必须是数组,它从第一个数组中排除相同的字符串。 贝娄是我的解决方案,但可能两个for循环不像可可风格。也许有人可以提出更好的建议?
for (NSString *carrier in currentCarriers) {
for (NSString *company in companyList)
{
if ([company isEqualToString:carrier]) [removedCompanies addObject:company]; }
}
NSMutableArray *companiesForAdd = [NSMutableArray arrayWithArray:companyList];
[companiesForAdd removeObjectsInArray:removedCompanies];
答案 0 :(得分:5)
将一个列表转换为可变数组,然后使用removeObjectsInArray:
,如:
foo = [NSMutableArray arrayWithArray:currentCarriers];
[foo removeObjectsInArray:companyList];
// foo now contains only carriers that are not in the company list.
修改强>
替代设置差异(但在大多数情况下由于复制/分配可能会更慢):
NSMutableSet *foo = [NSMutableSet setWithArray:currentCarriers];
[foo minusSet:[NSSet setWithArray:companyList]];
对于较大的列表,这可能会更快,但是您会丢失排序(如果有的话)。
答案 1 :(得分:2)
我想你可以使用NSArray的-containsObject:
方法摆脱内循环,类似
for (NSString *carrier in currentCarriers) {
if ([companyList containsObject:carrier])
[removedCompanies addObject:company];
}
NSMutableArray *companiesForAdd = [NSMutableArray arrayWithArray:companyList];
[companiesForAdd removeObjectsInArray:removedCompanies];
答案 2 :(得分:0)
我可以建议两个选项
currentCarriers
[companyList containsObject:]