Realm技术问题:如何对Results<Relax>中所有duration字段求和
解决Realm Results集合中duration字段求和的问题
嘿,我来帮你搞定这个求和需求!针对Realm的Results<Relax>集合,有几种简单可行的方法来计算所有duration字段的总和:
直接用reduce累加(推荐)
Realm的Results类型遵循Swift的Sequence协议,所以可以直接调用reduce方法来逐个累加数值,而且这种方式不会一次性把所有数据加载到内存,性能更友好:let totalDuration = relaxResults.reduce(0.0) { accumulatedSum, relaxItem in accumulatedSum + relaxItem.duration } // 或者更简洁的写法: let totalDuration = relaxResults.reduce(0.0) { $0 + $1.duration }用reduce(into:)提升性能
如果你的数据集比较大,推荐用reduce(into:),它能避免累加过程中的不必要拷贝,效率更高:let totalDuration = relaxResults.reduce(into: 0.0) { total, relaxItem in total += relaxItem.duration }转成普通数组后求和
要是你更习惯操作Swift原生数组,也可以先把Realm的Results转换成普通数组,再用熟悉的方法计算:// 先将Realm集合转为原生数组 let relaxArray = Array(relaxResults) // 再累加求和 let totalDuration = relaxArray.reduce(0.0) { sum, relax in sum + relax.duration }
需要注意的是,要确保你的Relax模型里duration字段是数值类型(比如Double或Float),从你提供的数据来看,它是带小数的数值,这个前提是满足的。
内容的提问来源于stack exchange,提问作者Chris Campbell
相关产品推荐
相关产品推荐

