IOS 核心数据:计算重复值
IOS Core Data : Count Duplicated values
我的应用程序中保存了很多对象 "Tracks" 作为 :
@interface Track : NSManagedObject
@property (nonatomic, strong) NSString *title;
@property (nonatomic, strong) NSString *artistName;
@end
如何使用 NSFetchRequest(不使用 NSCounterSet)获取最受欢迎的艺术家姓名?
你通过
- 按
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];
执行提取时,您将取回一组字典。每个字典都有两个键:artistName
将是您的 artistName
属性 的值,count
将是每个艺术家姓名出现的次数。
您需要自己在该数组中找到最大值,因为不幸的是您无法告诉提取请求按表达式值对结果进行排序。
我的应用程序中保存了很多对象 "Tracks" 作为 :
@interface Track : NSManagedObject
@property (nonatomic, strong) NSString *title;
@property (nonatomic, strong) NSString *artistName;
@end
如何使用 NSFetchRequest(不使用 NSCounterSet)获取最受欢迎的艺术家姓名?
你通过
- 按
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];
执行提取时,您将取回一组字典。每个字典都有两个键:artistName
将是您的 artistName
属性 的值,count
将是每个艺术家姓名出现的次数。
您需要自己在该数组中找到最大值,因为不幸的是您无法告诉提取请求按表达式值对结果进行排序。