快速提问。因此我的阵列是:
OutsideIncome(userName: "Beth", allOthers: 0, babysitting: 0, houseCleaning: 0, mowingLawns: 0, summerJobs: 0),
OutsideIncome(userName: "Molly", allOthers: 0, babysitting: 0, houseCleaning: 0, mowingLawns: 0, summerJobs: 0)
一个元素是String
,其余元素是Ints
。我怎样才能得到Ints的总和?
Code I尝试过:
#1:FOR LOOP - 没有工作
for item in OutsideIncome.incomeArray.filter({ $0.userName != self.currentUserName }).reduce(0 , { $0 + $1 }) {
tempOutsideIncome = item.allOthers + item.babysitting + item.houseCleaning + item.mowingLawns + item.summerJobs
}
#2:过滤器减少 - 没有工作
let outsideIncome = OutsideIncome.incomeArray.filter({ $0.userName != self.currentUserName })
outsideIncome.reduce(0, { $0 + $1 })
#3:FILTER - 有效,但很麻烦。必须有一个更简单的方法。
let tempArray = OutsideIncome.incomeArray.filter({ $0.userName == self.currentUserName })
let tempOutsideSum = (tempArray.first?.allOthers)! + (tempArray.first?.babysitting)! + (tempArray.first?.houseCleaning)! + (tempArray.first?.mowingLawns)! + (tempArray.first?.summerJobs)!
我在想某种方式map
或filter
reduce
它,但我无法弄明白。
任何人都有解决方案吗?
更新
感谢您的回答。我的最终代码:
struct OutsideIncome {
let userName: String
let allOthers: Int
let babysitting: Int
let houseCleaning: Int
let mowingLawns: Int
let summerJobs: Int
// create 'computed property'
var totalJobs: Int {
return allOthers +
babysitting +
houseCleaning +
mowingLawns +
summerJobs
}
}
let currentUserName = "Beth"
let array = [OutsideIncome(userName: "Beth", allOthers: 1, babysitting: 0, houseCleaning: 0, mowingLawns: 0, summerJobs: 0),
OutsideIncome(userName: "Molly", allOthers: 0, babysitting: 0, houseCleaning: 0, mowingLawns: 0, summerJobs: 0)]
let result = array.filter({ $0.userName == user.firstName }).reduce(0, { $0 + $1.totalJobs })
}
答案 0 :(得分:2)
创建计算属性
var totalJobs: Int {
return allOthers +
babysitting +
houseCleaning +
mowingLawns +
summerJobs
}
然后你可以链过滤和减少
let result = array.filter { $0.userName == currentUserName}.reduce(0) { (res, item) -> Int in
return res + item.totalJobs
}