使用NSPredicate从NSArray中提取独特NSDates的方法?

时间:2012-11-13 09:08:50

标签: objective-c nsarray nspredicate

我有一个NSArray的NewsArticle对象:

@interface NewsArticle : NSObject

@property (nonatomic, strong) NSString *title;
@property (nonatomic, strong) NSDate *dateTime;
@property (nonatomic, strong) NSString *content;

@end

我想在每个NSArray中创建一个article.dateTime个唯一日期(忽略时间) - 我知道我可以通过枚举数组并自己进行检查来做到这一点,但我希望有一个更简单的解决方案。

我来自C#背景,我知道在C#中我可以使用简单的LINQ语句来实现这一点 - 看起来NSPredicate可能会提供此功能,但我无法解决如何,或在网上找到合适的例子。

1 个答案:

答案 0 :(得分:4)

NSPredicate用于过滤对象集合,但您希望从集合的每个成员中提取属性。

您可以(正如CAMOBAP在他的评论中所说)使用键值编码(KVC)来获取所有dateTime值的数组。然后,您可以使用NSSet来消除重复项:

NSArray *allDateTimes = [articles valueForKey:@"dateTime"];
NSSet *uniqueDateTimes = [NSSet setWithArray:allDateTimes];

您甚至可以使用有点深奥的@distinctUnionOfObjects密钥在一条KVC消息中完成所有操作:

NSArray *uniqueDateTimes = [articles valueForKeyPath:@"@distinctUnionOfObjects.dateTime"];

请注意,第二个示例使用的是valueForKeyPath:,而不是valueForKey:

通过阅读Key-Value Coding Programming Guide,您可以了解更多信息(哦,以及更多!)。