首页 > 解决方案 > 如何对 Array 的值执行求和运算,直到它在 Swift 中达到某个数字?

问题描述

所以我有以下

class Passenger {

    let passengerId: Int, firstName: String, lastName: String, daysOnTrip: Int

    init(passengerId: Int, firstName: String, lastName: String, daysOnTrip: Int) {
        self.passengerId = passengerId
        self.firstName = firstName
        self.lastName = lastName
        self.daysOnTrip = daysOnTrip
    }

}

let peopleTravelling = [
    Passenger(passengerId:1, firstName:"John", lastName:"Doe", daysOnTrip: 10),
    Passenger(passengerId:2, firstName:"Seb", lastName:"Johns", daysOnTrip: 5),
    Passenger(passengerId:3, firstName:"Emilia", lastName:"Clarke", daysOnTrip: 7)
]

singleDayCosts:[Double] = [3.3333333333333335, 3.3333333333333335, 3.3333333333333335, 3.3333333333333335, 3.3333333333333335, 5.0, 5.0, 10.0, 10.0, 10.0]
let mappedDays = peopleTravelling.map{$0.daysOnTrip}
var tripCostsPerson: [Double] = []

我正在尝试tripCostsPerson: [Double] = []用 SingleDayCosts 中的第一个“X”个值的 SUM 填充数组,其中“X”是 =daysOnTrippeopelTravelling.

例如,对于乘客 1 应该是所有 10 个值的总和singleDayCosts:[Double] 对于乘客 2 应该是前 5 个值的总和singleDayCosts:[Double] 对于乘客 3 应该是前 7 个值的总和singleDayCosts:[Double]

我试过这段代码

for daysSpend in peopleTravelling {
    tripCostsPerson.append(singleDayCosts.reduce(0, +))
}

但是对于所有 3 名乘客,我得到所有 10 个数字的总和 - [56.66666666666667, 56.66666666666667, 56.66666666666667]

如何限制循环中的操作以停止singleDayCosts根据里面的数字从数组中添加值daysOnTrip。有什么想法吗?

标签: arraysswift

解决方案


你可以使用prefix方法。

for person in peopleTravelling {
    let sumOfCosts = singleDayCosts.prefix(person.daysOnTrip).reduce(0, +)
    tripCostsPerson.append(sumOfCosts)
}

这里有一些更实用的方法。

let tripCostsPerson = peopleTravelling.map { person in
    singleDayCosts.prefix(person.daysOnTrip).reduce(0, +)
}

推荐阅读