从NSMutableArray对象属性中删除重复的对象?

时间:2013-11-17 17:31:35

标签: ios objective-c nsstring nsmutablearray

我有一个NSObject,其属性如下

@property (nonatomic, retain) NSString * destinationid;
@property (nonatomic, retain) NSString * destinationname;
@property (nonatomic, retain) NSString * assetid;
@property (nonatomic, retain) NSString * assetname;
@property (nonatomic, retain) NSString * assetdescription;

在这里,我将其保存在NSMutableArray中。

我从服务器获取的数据包含相同的DestinationName,但不同的其他属性。

我想检查一下,如果已将相同名称的Object添加到NSMutableArray中,请不要再添加它。

我尝试使用 内置循环 ,但没有用:(

由于

3 个答案:

答案 0 :(得分:16)

这是一个解决方案:

NSArray *originalArray = ... // original array of objects with duplicates
NSMutableArray *uniqueArray = [NSMutableArray array];
NSMutableSet *names = [NSMutableSet set];
for (id obj in originalArray) {
    NSString *destinationName = [obj destinationname];
    if (![names containsObject:destinationName]) {
        [uniqueArray addObject:obj];
        [names addObject:destinationName];
    }
}

答案 1 :(得分:1)

一种方法是创建一个只包含其他数组中目标名称的新数组,并检查服务器中的名称是否包含在那里:

NSArray *names = [self.mut valueForKey:@"destinationname"];
    if (![names containsObject:destName]) {
        [self.mut addObject:newObjectFromServer];
    }

mut是我的可变数组的名称,destName是从服务器获取的对象中的目标名称。

答案 2 :(得分:0)

此功能应该完成这项工作:

BOOL contains(id object, NSMutableArray *array)
{
    for (id array in yourArray)
        if ([object.destinationname isEqualToString:yourObject.destinationname])
            return YES;
    return NO;
}

用法示例:

if (!contains(object, array))
    [array addObject:object];
相关问题