我目前正在使用 NSExpressions 处理从 Core Data 检索的数据。这些实体属于“交易”类型,并具有我感兴趣的两个属性:类型 ( NSString*
) 和值 ( double
)。我想要的是每种类型的所有绝对值的总和。
我目前拥有的是这样的:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Transaction" inManagedObjectContext:appDelegate.managedObjectContext];
NSAttributeDescription *att = [entity.attributesByName objectForKey:@"type"];
[request setEntity:entity];
NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"value"];
NSExpression *expression = [NSExpression expressionForFunction:@"sum:" arguments:@[keyPathExpression]];
NSExpressionDescription *expDesc = [[NSExpressionDescription alloc] init];
[expDesc setName:@"typeSum"];
[expDesc setExpression:expression];
[expDesc setExpressionResultType:NSDoubleAttributeType];
[request setPropertiesToFetch:@[expDesc, att]];
[request setPropertiesToGroupBy:@[att]];
[request setResultType:NSDictionaryResultType];
NSError *err = nil;
NSArray* results = [appDelegate.managedObjectContext executeFetchRequest:request error:&err];
这将返回一个 NSArray,其中包含包含该类型实体的类型和值的总和的字典,如下所示:
<_PFArray 0x15ecc5a0>(
{
type = TypeName1;
typeSum = "-15.5";
},
{
type = TypeName2;
typeSum = "22.5";
},
{
type = TypeName3;
typeSum = "237.9";
}
)
问题在于总和不是绝对值的总和。有没有一种方法可以组合abs:
并sum:
给我想要的结果?