objective-c - 使用 NSPredicate 从 NSArray 中提取唯一 NSDate 的方法?

标签 objective-c nsarray nspredicate

我有一个 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/

相关文章:

ios - NSArray 检索单个项目

objective-c - 如何检查传入的 JSON feed 是否包含单个或多个记录?

swift - NSPredicate 比较 Int32

swift - 为什么会出现 NSInvalidArgument 异常,原因 : 'Unable to parse the format string'

php - iOS登录-此代码正确/安全吗?如何检查用户是否已经登录?

ios - 自定义 iOS 7 UIViewController 转换保留周期

iphone - Objective-C 中的全局常量

ios - 需要从 NSArray 或 NSMutableArray 存储/检索对象

iphone - NSPredicate 调用测试方法从 Core Data 获取结果

ios - 按下完成后如何从 MPMoviePlayerController 中删除动画