arrays - 如何对 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”是 =daysOnTrip
到peopelTravelling
.
例如,对于乘客 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
。有什么想法吗?
解决方案
你可以使用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, +)
}
推荐阅读
- c# - 如何从 Xamarin 项目中的跨平台页面打开和关闭 Android 活动
- php - 无法识别流明中的 $router 变量的问题
- python - 从 pyowm 天气数据构造字符串
- google-apps-script - 如何使用谷歌应用脚本下载文件
- django - DRF:访问元之外的序列化器字段
- arrays - 数组字面量在 Xcode 中导致巨大的构建时间
- r - 如何将三明治调整后的 p 值摘要转换为数据框?
- .net - 如何使用 wix 安装程序启用 Windows 功能
- asp.net-mvc - ASP.NET MVC 报告背景 CSS 图像和收藏图标的 404 缺少页面错误
- sql - 比较两个表时,Oracle 查询给了我错误输出