我在imagesArray中添加了imageDataObject。
ImageData *imageDataObject = [[ImageData alloc]initWithImageId:[[imageListArray objectAtIndex:indexPath.row]imageId]
imageName:[[imageListArray objectAtIndex:indexPath.row] imageName]
image:[UIImage imageWithData:imageData]];
[imagesArray addObject:imageDataObject];
我想避免添加imageDataObject,如果它已经存在于imagesArray中。 如果imageId已经在imagesArray对象中,则imageDataObject是重复的。 imageId是来自URL的字符串值。
我尝试过containsObject但它没有用。
我知道有类似的问题,但对我没什么用。
请帮忙。
答案 0 :(得分:1)
您需要为-isEqual:
课程实施-hash
和ImageData
。正确执行此操作后,-containsObject:
或一组(例如NSMutableOrderedSet
)将能够正常工作。
您没有解释imageId的类型。如果它是一个对象类型,那么你可以捎带它的相等定义。如果它是一个整数类型,你可以做一些简单的事情,比如使用整数值作为哈希,或者你可以用NSNumber
的相等和哈希实现来实现它。
答案 1 :(得分:1)
有很多方法,这里有一个选择:
ImageData
是您自己的类型。 NSArray
的{{1}}通过调用containsObject:
来确定匹配的对象是否存在。因此,在isEqual:
上定义isEqual:
和hash
(您必须实现两者),只根据您的ImageData
(无论其类型是什么)来比较相等性。 imageID
和isEqual:
,因为它们已经存在且不基于hash
,那么您可以使用imagedID
的{{1}}方法。这将调用一个块来依次测试数组的每个元素,并返回匹配的第一个元素的索引,如果不存在这样的元素,则返回NSArray
。对indexOfObjectPassingTest:
进行块测试,如果方法返回NSNotFound
,则表示没有重复,并且应添加新的imageID
。NSNotFound
作为键将ImageData
对象存储在ImageData
中(如果NSMutableDictionary
是基本类型,则将其包装为对象以将其用作密钥,例如将imageID
包裹为imageID
- 使用现代语法int
仅NSNumber
作为5
)。您可以轻松地测试密钥存在(查找返回@5
),或者只是添加新对象而不检查是否重复新值只会替换旧值。HTH