首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift reduce函数问题

Swift reduce函数问题
EN

Stack Overflow用户
提问于 2017-07-13 20:30:28
回答 3查看 93关注 0票数 1

我有一组心率。我只想得到最近5分钟的平均心率。(数组包含超过一小时的心率)。

代码语言:javascript
复制
class HeartRate
{
    var hr = 0
    var date : Date?
}

var arrHeartRate = [HeartRate]()
let minDate = Date().addingTimeInterval(-300) //get 5min before time
var avgHR = self.arrHeartRate.filter { (Item) -> Bool in
                return Item.date! > minDate
            }.reduce(0) { (res, item) -> Result<Any, <#Error: Error#>> in
                return res
            }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-13 21:00:49

下面是一些代码,它是不同的stackoverflow答案的聚合。

代码语言:javascript
复制
class HeartRate
{
    var hr = 0
    var date: Date?
}

extension Collection where Iterator.Element == HeartRate, Index == Int {
    /// Returns the average of all elements in the array
    var average: Double {
        return isEmpty ? 0 : Double(reduce(0) { $0 + $1.hr }) / Double(endIndex-startIndex)
    }
}

var arrHeartRate = [HeartRate(), HeartRate()]
let minDate = Date().addingTimeInterval(-300) //get 5min before time
let rateInLast5Min = arrHeartRate.filter {
    guard let date = $0.date else { return false }
    return date > minDate
}
var avgHR = rateInLast5Min.average
票数 4
EN

Stack Overflow用户

发布于 2017-07-13 20:51:37

您可以在两个步骤中进行过滤和缩减。首先,获取时间范围内的心率数组

代码语言:javascript
复制
let filtered = arrHeartRate.filter{$0.date ?? Date() > minDate}

或者进行一些调整以从已过滤的数组中排除nil date

代码语言:javascript
复制
let filtered = arrHeartRate.filter{$0.date ?? Date().addingTimeInterval(-500) > minDate}

然后计算平均值和收益率

代码语言:javascript
复制
return Double(filtered.reduce(0){$0 + $1.hr}) / Double(filtered.count)
票数 3
EN

Stack Overflow用户

发布于 2017-07-13 20:39:31

我还没有运行它,但经过一些调整应该是您正在寻找的

代码语言:javascript
复制
    let rateInLast5Min = arrHeartRate.filter({ 0$.date! > minDate  })
let hours = rateInLast5Min.map{ return $0.hr }.reduce(0, +)
let average = Double(hours)/Double(rateInLast5Min.count)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45080688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档