我有一个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中,请不要再添加它。
我尝试使用 内置循环 ,但没有用:(
由于
答案 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];