我有一个 NewsArticle 对象的 NSArray:
@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
可能会提供此功能,但是我无法弄清楚如何操作,也无法在网上找到任何合适的示例。
最佳答案
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了解更多信息(哦,还有更多!) .
关于objective-c - 使用 NSPredicate 从 NSArray 中提取唯一 NSDate 的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13357992/