arrays - 过滤非整数并对二维数组求和

标签 arrays swift

快速提问。我的数组是这样的:

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/

相关文章:

java - 从Java中的数组/集合的每个元素中剥离字符

ios - 在所有 UIWebView 请求上添加自定义 http header 字段

swift - 对使用 Parse.com 的 Swift 应用程序进行单元测试

ios - Xcode swift : how to import a Swift project

ios - Swift ExpressibleByIntegerLiteral - 它究竟是如何工作的?

javascript - 如何比较数组并创建与数组 a 匹配的新数组?

javascript - 为什么 array.sort 在 JavaScript 中不起作用?

ios - 如何删除 firebase 数据库

javascript - 为什么 (!+[]+[]) 在 Javascript 中是 'true' 而 (false + []) 是 'false'?

java - 如何在数组中同时调用抽象方法和接口(interface)方法?