Arrays 过滤非整数并将其与二维数组求和

Arrays 过滤非整数并将其与二维数组求和,arrays,swift,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) 一个元素是字符串,其

快速提问。因此,我的数组是:

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)
一个元素是
字符串
,其余元素是
整数
。我怎样才能得到整数的和呢

我尝试过的代码:

#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
}
let outsideIncome = OutsideIncome.incomeArray.filter({ $0.userName != self.currentUserName })
outsideIncome.reduce(0, { $0 + $1 })
#2:过滤器减少功能-不起作用

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
}
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)!
我在想有办法
映射它或
过滤它
减少它,但我想不出来

有人有办法吗

更新:

谢谢你的回答。我的最终代码:

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

}创建一个计算属性

    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

}

我首先要为
OutsideIncome
创建一个计算属性,它是所有其他Int添加的属性。似乎您可能经常使用该var,那么为什么不创建它呢。然后,您将只处理一个属性,并执行更简单的操作(应该已经有了示例),例如
let total=filteredArray.flatMap{$0.totalIncome}
,其中filteredArray是您的
tempArray
(您的第三个测试),我必须将
字符串
int
一起放在数组中。有没有办法过滤掉
字符串
,只留下
整数
?我首先要为
外部收入
创建一个计算属性,它是所有其他整数添加的。似乎您可能经常使用该var,那么为什么不创建它呢。然后,您将只处理一个属性,并执行更简单的操作(应该已经有了示例),例如
let total=filteredArray.flatMap{$0.totalIncome}
,其中filteredArray是您的
tempArray
(您的第三个测试),我必须将
字符串
int
一起放在数组中。有没有办法过滤掉
字符串
,只留下
整数
?我不太懂你的代码。当我输入一个错误时,它显示
使用未解析标识符“所有其他”
。我到底应该如何使用计算属性?哇。超级酷。成功了。我刚刚学到了一些新东西:计算属性!谢谢没问题@PhontaineJudd祝你今天愉快!我不太懂你的代码。当我输入一个错误时,它显示
使用未解析标识符“所有其他”
。我到底应该如何使用计算属性?哇。超级酷。成功了。我刚刚学到了一些新东西:计算属性!谢谢没问题@PhontaineJudd祝你今天愉快!