【问题标题】:Swift 3 - Reduce a collection of objects by an Int propertySwift 3 - 通过 Int 属性减少对象集合
【发布时间】:2017-11-05 14:34:02
【问题描述】:

我有一个包含 3 个对象的数组,如下所示:

class AClass {
    var distance: Int?
}

let obj0 = AClass()
obj0.distance = 0

let obj1 = AClass()
obj1.distance = 1

let obj2 = AClass()
obj2.distance = 2

let arr = [obj0, obj1, obj2]

当我减少数组并将其分配给变量时,我只能对数组中的最后一个元素求和。

let total = arr.reduce(0, {$1.distance! + $1.distance!})  //returns 4

如果我尝试 $0.distance!它的错误是“表达式不明确,没有更多上下文”。

我尝试更明确:

var total = arr.reduce(0, {(first: AClass, second: AClass) -> Int in
    return first.distance! + second.distance!
})

但是这个错误“'Int'与上下文类型'_'不兼容” 如何将其减少到距离的总和?

【问题讨论】:

    标签: swift reduce


    【解决方案1】:
    var total = arr.reduce(0, {$0 + $1.distance!})
    

    第一个参数是累加器,它已经是一个整数了。

    请注意,这将在没有距离的元素上崩溃。你可以解决这个问题,例如使用:

    let total = arr.reduce(0, {$0 + ($1.distance ?? 0)})
    

    let total = arr.compactMap { $0.distance }.reduce(0, +)
    

    【讨论】:

    • arr.flatMap 创建一个中间数组(arr.lazy.flatMap 可以避免),因此在这种情况下,其他解决方案可能更可取。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    • 2018-04-08
    • 2011-08-21
    相关资源
    最近更新 更多