使用reduce将struct的属性追加到数组

时间:2017-08-02 14:40:53

标签: swift

我有一个项目数组

struct Item {
    var id: String
}

如何使用 reduce 功能将所有ID附加到数组?

我尝试了什么:

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

但是编译显示错误:

  

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

3 个答案:

答案 0 :(得分:3)

试试这个:

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

答案 1 :(得分:2)

您可能意味着map而不是reduce

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

答案 2 :(得分:1)

如果你想用reduce来做,这里是Swift 3和4的片段:

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. 您无法编辑在块中传递给您的参数,您必须返回新对象
  3. 但在这种情况下,最好的解决方案是使用map:

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