快速提问。我的数组是这样的:
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
。我将如何获得整数的总和?
我试过的代码:
#1:FOR 循环 - 无效
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)!
我想有一些方法可以映射
它或过滤
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 })
}
最佳答案
创建计算属性
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
关于arrays - 过滤非整数并对二维数组求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48539590/