Iphone 如何避免NSMutableArray中的重复字典对象
嗨,在我的一个应用程序中,我有一个数组,其中包含一组Iphone 如何避免NSMutableArray中的重复字典对象,iphone,objective-c,Iphone,Objective C,嗨,在我的一个应用程序中,我有一个数组,其中包含一组NSMutableDictionary对象。dictionary对象有三个键值对,如下所示 公司 产品 数量 和具有多个对象的数组。现在,通过使用不同的add按钮,我将这些dictionary对象添加到数组中。即使在向数组中添加对象时,我也会使用NSNotFound方法检查是否存在任何重复对象。如下 if([Array indexOfObject:dicObject] == NSNotFound) { [Array addO
NSMutableDictionary
对象。dictionary对象有三个键值对,如下所示
NSNotFound
方法检查是否存在任何重复对象。如下
if([Array indexOfObject:dicObject] == NSNotFound)
{
[Array addObject:dicObject];
}
在这里,它在少数情况下运行良好,但在其他情况下不起作用。我将用一个例子解释:
公司:XYZ产品:ABC数量:2
Company:XYZ Product:ABC Quantity:6
在这种情况下,此产品将毫无错误地添加到阵列中。但我担心的是,我不想再将其添加到数组中,只需要更新数量,因为公司和产品名称都是相同的。所以,你能告诉我如何处理这种情况吗。我认为你需要改变策略;首先创建一个自定义对象来保存您的公司、产品和数量,并确保您实现了和方法 然后只需将自定义对象存储在一个对象中,这将确保不存在重复的对象 您的自定义对象现在将成为应用程序的主要模型对象(即提供“M”in,Cocoa和Cocoa Touch应用程序所基于的设计模式),并且您将发现随着应用程序的增长,它将被反复使用。您可以使用它来了解阵列中是否已经存在类似的词典 这可能看起来像这样:
NSMutableArray *arr = // your array
NSDictionary *dicObject = // your object
NSUInteger indexOfDicObject = [arr indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop)
{
return ([obj[@"company"] isEqualToString:dicObject[@"company"]] &&
[obj[@"product"] isEqualToString:dicObject[@"product"]]);
}];
if (indexOfDicObject == NSNotFound)
{
[arr addObject:dicObject];
}
else
{
NSNumber *quantity = arr[indexOfDicObject][@"quantity"];
arr[indexOfDicObject][@"quantity"] = @([quantity intValue] + [dicObject[@"quantity"] intValue]);
}
我做了以下假设:
值是一个company
李>NSString
值是一个product
李>NSString
值是一个整数,存储在quantity
中NSNumber
另请参见,如果可以用类替换词典,那么哪一个更好 你好,鲁沙布,谢谢你的回复。实际上,我需要避免数组中的重复项而不是字典中的重复项。我的数组有字典对象。嘿,伙计,你试过NSSet或NSOrderedSet吗?它们都不允许重复项,并且可以很容易地从数组转换为数组。我喜欢这种方法,因为一旦编写了自定义对象,代码应该看起来很简单。但是,当对象具有相同的
公司和产品@boyfarrell时,他还需要包括一种“自动”将数量
属性添加到一起的方法,这不是在isEqual:
比较中忽略数量,并在添加对象之前检查对象是否存在的情况吗(在这种情况下,如果有,他会更新数量)?我认为这不能“自动”完成但是。我喜欢这个,这看起来很优雅。但是可能需要为gadamsetty更改更多代码。同意;但是你最终得到的模型对象将在整个应用程序中都很有用。它提供了MVC中的M。非常好和干净的解决方案!我不知道该方法!+1Hi Guillaume Algis谢谢你的回复。你的答案有些简单是什么帮助了我。