Objective c 如果数组中已存在对象,请避免将对象添加到NSMutableArray
我正在imagesArray中添加imageDataObjectObjective c 如果数组中已存在对象,请避免将对象添加到NSMutableArray,objective-c,nsmutablearray,Objective C,Nsmutablearray,我正在imagesArray中添加imageDataObject ImageData *imageDataObject = [[ImageData alloc]initWithImageId:[[imageListArray objectAtIndex:indexPath.row]imageId] imageName:[[imageListArray objectAtIndex:indexP
ImageData *imageDataObject = [[ImageData alloc]initWithImageId:[[imageListArray objectAtIndex:indexPath.row]imageId]
imageName:[[imageListArray objectAtIndex:indexPath.row] imageName]
image:[UIImage imageWithData:imageData]];
[imagesArray addObject:imageDataObject];
如果imagesArray中已经存在imageDataObject,我希望避免添加它。
如果imageId已在imagesArray对象中,则imageDataObject是重复的。
imageId是来自URL的字符串值
我试过containsObject,但它不起作用
我知道也有类似的问题,但对我来说什么都不管用
请提供帮助。您需要为
ImageData
类实现-isEqual:
和-hash
。一旦正确地执行此操作,则-containsObject:
或集合(例如NSMutableOrderedSet
)将能够正常工作
您没有解释imageId是什么类型的。如果它是一个对象类型,那么您可以利用它的相等定义。如果它是整数类型,您可以执行一些简单的操作,例如使用整数值作为散列,也可以根据
NSNumber
s等式和散列实现来实现它。许多方法,这里有一个选择:
ImageData
是您自己的类型NSArray
的containsObject:
通过调用isEqual:
确定是否存在匹配的对象。因此,在ImageData
上定义isEqual:
和hash
(您必须同时实现这两个功能),它只是基于您的imageID
(无论是哪种类型)进行相等性比较李>
isEqual:
和hash
,因为它们已经存在并且不是基于imagedID
的,那么可以使用NSArray
的indexOfObjectPassingTest:
方法。这需要调用一个块来依次测试数组的每个元素,并返回匹配的第一个元素的索引,如果不存在这样的元素,则返回NSNotFound
。对您的imageID
进行块测试,如果该方法返回NSNotFound
,则您知道没有重复项,应添加新的ImageData
imageID
作为键,将ImageData
对象存储在NSMutableDictionary
中(如果imageID
是一个基本类型,则将其包装为对象以将其用作键,例如将int
包装为NSNumber
——使用现代语法5
只是将@5
包装为NSNumber
)。您可以轻松测试键的存在性(查找返回nil
),或只是添加新对象,而不检查是否存在重复。新值将仅替换旧值HTH是什么使两个
imageDataObject
相同?仅仅因为两个imageDataObject
拥有相同的图像或图像名称并不使它们相同(就containsObject
而言)。它们只是有相同的内容。可能尝试使用INSTEAD。没有实际的方法来判断您有两个不同但相同的图像。如果要避免重复,您需要跟踪图像的来源,并消除具有相同来源的图像。我只需检查唯一的imageid。使用集
将非常有用我们最好的选择。也许能帮助你