合并两个NSArray删除重复项

时间:2014-11-12 10:11:29

标签: ios objective-c nsarray

我有一系列城市和一系列国家。 这两个对象有一个共同的属性:城市名称。 我需要创建一个新数组,添加所有城市名称都没有在Cities数组中的国家。

我尝试在两个数组上进行迭代,比较城市名称并仅将新的数据添加到新数组中。结果是,当它检查第一个城市时,所有具有其他名称的城市都被添加到数组中,因此Cities数组中的其他城市也已经存在。

self.filteredCountriesArray = [NSMutableArray new];

for (Country* country in self.countries) {
    for (City *city in self.cities) {
        if (![country.city isEqualToString:city.name]) {
            [self.filteredCountriesArray addObject:country];
        }
    }
}

建议?

1 个答案:

答案 0 :(得分:4)

不确定我是否理解你想要的东西,我的猜测是你想做这样的事情:

for (Country *country in self.countries) {
    BOOL found = NO;

    for (City *city in self.cities) {
        if ([country.city isEqualToString:city.name]) {
            found = YES;
            break;
        }
    }

    if (!found) {
        [self.filteredCountriesArray addObject:country];
    }
}

为了提高速度,我首先要创建一个带有城市名称的NSSet

NSMutableSet *cityNames = [NSMutableSet set];
for (City *city in self.cities) {
    [cityNames addObject:city.name];
}

for (Country *country in self.countries) {
    if (![cityNames containsObject:county.city]) {
        [self.filteredCountriesArray addObject:country];
    }
}