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 将是每个艺术家姓名出现的次数。

您需要自己在该数组中找到最大值,因为不幸的是您无法告诉提取请求按表达式值对结果进行排序。