IOS核心数据:计算重复值
Posted
技术标签:
【中文标题】IOS核心数据:计算重复值【英文标题】:IOS Core Data : Count Duplicated values 【发布时间】:2015-02-25 14:14:22 【问题描述】:我的应用中有很多保存的对象“曲目”:
@interface Track : NSManagedObject
@property (nonatomic, strong) NSString *title;
@property (nonatomic, strong) NSString *artistName;
@end
如何使用 NSFetchRequest(并且不使用 NSCounterSet)获得最受欢迎的艺术家姓名?
【问题讨论】:
适用于 ios 还是 OSX? 【参考方案1】:你这样做
将结果按artistName
分组,并且
创建一个NSExpression
来计算artistName
在这些分组结果中出现的次数。
首先创建表达式,将其命名为count
,使用count
函数,并返回一个整数结果:
NSExpression *countExpr = [NSExpression expressionWithFormat:@"count:(artistName)"];
NSExpressionDescription *countExprDesc = [[NSExpressionDescription alloc] init];
[countExprDesc setName:@"count"];
[countExprDesc setExpression:countExpr];
[countExprDesc setExpressionResultType:NSInteger64AttributeType];
然后创建获取请求以使用它,通过表达式值进行获取和分组:
NSFetchRequest *fr = [[NSFetchRequest alloc] initWithEntityName:@"Track"];
[fr setPropertiesToFetch:@[@"artistName", countExprDesc];
[fr setPropertiesToGroupBy:@["artistName"];
[fr setResultType:NSDictionaryResultType];
当您执行 fetch 时,您会得到一个字典数组。每个字典都有两个键:artistName
将是您的 artistName
属性的值,count
将是每个艺术家姓名出现的次数。
您需要自己找到该数组中的最大值,因为不幸的是,您无法告诉 fetch 请求按表达式值对结果进行排序。
【讨论】:
以上是关于IOS核心数据:计算重复值的主要内容,如果未能解决你的问题,请参考以下文章