使用 NSPredicate 的不同对象
Posted
技术标签:
【中文标题】使用 NSPredicate 的不同对象【英文标题】:Distinct Object using NSPredicate 【发布时间】:2012-01-03 09:07:54 【问题描述】:我有一个自定义对象的 NSArray。考虑自定义对象具有 PageNumber 属性。我想用“customObject.PageNumber is distinct”之类的条件过滤我的 NSArray。
我知道我可以遍历数组并消除具有重复 pageNumbers 的对象。但是有什么简单的方法可以做到吗?我试过了,
[myarray valueForKeyPath:@"distinctUnionOfObjects.pageNumber"];
它给了我唯一的页码(如 7、8、9)。但我想要自定义对象本身,而不仅仅是页码。任何谓词可以帮助我吗?
【问题讨论】:
【参考方案1】:我创建了一个简单的库,称为 Linq to ObjectiveC,它是一组方法,可以让这类问题更容易解决。在您的情况下,您需要 Linq-to-ObjectiveC distinct 方法:
NSArray* itemsWithUniquePageNumbers = [items distinct:^id(id item)
return [item pageNumber];
];
这会返回一个对象数组,每个对象都有一个唯一的页码。
【讨论】:
这很酷。谢谢!【参考方案2】:是的,这可以在NSPredicate
的帮助下实现
customObject=[(NSArray*)[myArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self.PageNumber==%d",pageNumber]] lastObject];
//pageNumber is an integer
过滤后的数组是您的自定义对象的NSArray
,它是使用谓词过滤的结果。由于您的页码是唯一的,因此它将仅返回一个对象的数组。我们通过将lastObject
消息传递给它来得到它。
参考: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Predicates/predicates.html#//apple_ref/doc/uid/TP40001798-SW1
【讨论】:
对不起。我的问题导致误解。我会更新它。我想要其对象具有唯一页码的数组。 @Vignesh 我也面临同样的问题。你有什么解决办法吗?以上是关于使用 NSPredicate 的不同对象的主要内容,如果未能解决你的问题,请参考以下文章