我有一个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
可能会提供此功能,但我无法解决如何,或在网上找到合适的例子。
答案 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,您可以了解更多信息(哦,以及更多!)。