核心数据计算和数据分组

时间:2015-09-18 09:17:16

标签: ios swift core-data

示例:我有以下数据集:

date         eur   usd    aud
------------------------------
2015-01-01   0.5   1.0    1.5
2015-01-02   0.6   1.1    1.6
2015-01-03   0.4   1.0    1.3
           ....
2015-02-01   0.5   1.0    1.5
2015-02-02   0.6   1.1    1.6
2015-02-03   0.4   1.0    1.3

我的目标是计算一年中每周的平均比率eur / usd eud / aud。我期待以下结果:

avg eur / usd:
------------------
Week 1   0.5
Week 2   0.54
Week 3   0.4

为了计算eur / usd比率,我添加了NSExpression。这是代码:

    let usdExpression = NSExpression(forKeyPath: "usd")
    let eurExpression = NSExpression(forKeyPath: "eur")
    let ratioExpression = NSExpression(forFunction: "divide:by:", arguments: [usdExpression, eurExpression])
    let avgRatioExpression = NSExpression(forFunction: "average:", arguments: [ratioExpression])

我将表达式添加到获取请求中。现在我要按周分组。我不在数据库中存储一周(我只在那里有日期)。我已将transient property添加到我的模型中并在那里实现了逻辑:

var weekOfYear {
   var numberOfWeek: Int?
   ...
   return "Week \(numberOfWeek)"
}

但我无法通过此属性进行分组。那么我有什么办法可以获得分组值吗?如果不是,似乎我的表达方式毫无用处。

1 个答案:

答案 0 :(得分:0)

您不能按瞬态进行分组,因为它实际上并未存储在SQL中。您可以使瞬态值成为持久值并更新存储中的所有记录,然后您可以将其用于获取。这可能是最好的方法,因为周数不会改变,并且是一小块数据,因为数据增长到内存或运行多次提取将花费更多的时间。