从NSMutable​​Array对象属性中删除重复对象?

4

我有一个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,但其他属性不同。

我想检查是否已经将相同名称的对象添加到NSMutableArray中,如果是,则不再添加。

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

谢谢


你能说一下内部循环发生了什么吗?请展示你的代码。 - suvish valsan
我无法为此创建逻辑。 - Duaan
3个回答

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
一种方法是创建一个新数组,仅包含您其他数组中的目标名称,并检查来自服务器的名称是否包含在其中:
NSArray *names = [self.mut valueForKey:@"destinationname"];
    if (![names containsObject:destName]) {
        [self.mut addObject:newObjectFromServer];
    }

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

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];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接