CoreData 如果要進行條件查詢炼七,一般使用
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = 2"];
但是現(xiàn)在有這樣一個需求:
CoreData的數(shù)據(jù)表:字段如下
name:
date:
.....
其中date為保存數(shù)據(jù)時存入的日期,現(xiàn)在要對時間歸納虱朵,統(tǒng)計出日期為同一天的數(shù)據(jù)有幾組莉炉?
2020-01-10有10個
2010-02-09有3個
由于我們并不知道具體的日期,所以無法通過NSPredicate查找碴犬,在Excel中其實很容易辦到絮宁,在代碼中這時候我們需要用到NSExpression
它包含了強大的數(shù)學(xué)計算
1、統(tǒng)計:
average:
sum:
count:
min:
max:
median:
mode:
stddev:
2服协、基本運算:
add:to:
from:subtract:
multiply:by:
divide:by:
modulus:by:
abs:
3绍昂、高級運算
sqrt:
log:
ln:
raise:toPower:
exp:
解決剛才的需求
let expressionDescreption = NSExpressionDescription()
//采用的是計數(shù)運算,所以需要設(shè)定一個字段對應(yīng)的出來的value
expressionDescreption.name = "headCount"
//設(shè)定計算方式為count偿荷,并且還要設(shè)置需要計算的字段窘游,這里日期用的是remdate字段
expressionDescreption.expression = NSExpression(forFunction: "count:",arguments: [NSExpression(forKeyPath: "remdate")])
//設(shè)置接收的key
fetchRequest.propertiesToFetch = ["remdate", expressionDescreption]
fetchRequest.propertiesToGroupBy = ["remdate"]
expressionDescreption.expressionResultType = .undefinedAttributeType
fetchRequest.resultType = .dictionaryResultType
let fetchResults = try managedObectContext.fetch(fetchRequest)
最終打印結(jié)果為
[{
headCount = 3;
remdate = "2010-05-10";
}, {
headCount = 1;
remdate = "2010-05-11";
}, {
headCount = 1;
remdate = "2010-05-15";
}]
計算出總共有三天,每一天總共有多少個數(shù)據(jù)跳纳。