【问题标题】:Append property of struct to array using reduce使用reduce将结构的属性附加到数组
【发布时间】:2017-08-02 14:40:53
【问题描述】:

我有一个 Items 数组

struct Item {
    var id: String
}

如何使用 reduce 函数将所有 id 附加到数组中?

我的尝试:

self.items.reduce([String](), { $0.0.append($0.1.id)})

但是编译器显示错误:

上下文闭包类型 '(_, [Item]) -> _' 需要 2 个参数,但闭包主体中使用了 1 个

【问题讨论】:

    标签: swift


    【解决方案1】:

    试试这个:

    items.reduce([String](), { res, item in
        var arr = res
        arr.append(item.id)
        return arr
    })
    

    【讨论】:

    • 错误:“[Item]”类型的值没有成员“id”
    • 抱歉,更新了...正如@vadian 所说,您可能真的想使用map
    【解决方案2】:

    如果你想用 reduce 来做,这里是 Swift 3 和 4 的 sn-p:

    struct Item {
        var id: String
    }
    
    var items = [Item(id: "text1"), Item(id: "text2")]
    let reduceResult = items.reduce([String](), { $0 + [$1.id] } )
    reduceResult // ["text1", "text2"]
    

    有两个问题:

    1. Reduce 为您提供 2 个参数,而不是具有 2 个值的单个元组
    2. 您无法编辑在块中传递给您的参数,您必须返回新对象

    但在这种情况下,最好的解决方案是使用地图:

    let reduceResult = items.map { $0.id }
    

    【讨论】:

      【解决方案3】:

      您的意思可能是map 而不是reduce

      let ids = items.map{ $0.id }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-31
        • 1970-01-01
        • 2021-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多