0

我有一个自定义对象的 NSArray。考虑自定义对象具有 PageNumber 属性。我想用“customObject.PageNumber is distinct”之类的条件过滤我的 NSArray。

我知道我可以遍历数组并消除具有重复 pageNumbers 的对象。但是有什么简单的方法可以做到吗?我试过了,

[myarray valueForKeyPath:@"distinctUnionOfObjects.pageNumber"];

它给了我唯一的页码(如 7、8、9)。但我想要自定义对象本身,而不仅仅是页码。任何谓词可以帮助我吗?

4

2 回答 2

1

我创建了一个简单的库,称为 Linq to ObjectiveC,它是使此类问题更容易解决的方法的集合。在您的情况下,您需要Linq-to-ObjectiveC distinct方法:

NSArray* itemsWithUniquePageNumbers = [items distinct:^id(id item) {
    return [item pageNumber];
}];

这将返回一个对象数组,每个对象都有一个唯一的页码。

于 2013-03-06T08:04:03.270 回答
0

是的,这是可能的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

于 2012-01-03T09:34:45.710 回答