使用reduce将结构的属性附加到数组

Posted

技术标签:

【中文标题】使用reduce将结构的属性附加到数组【英文标题】:Append property of struct to array using 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 个

【问题讨论】:

【参考方案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"]

有两个问题:

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

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

let reduceResult = items.map  $0.id 

【讨论】:

【参考方案3】:

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

let ids = items.map $0.id 

【讨论】:

以上是关于使用reduce将结构的属性附加到数组的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 基于reduce方法实现数组内对象的同属性运算

JavaScript 基于reduce方法实现数组内对象的同属性运算

不同应用状态结构级别的reducer的可重用性

MPI_Reduce() 到特定的数组元素

如何在 createSlice 的 reducer 中获取状态值?

教你玩转数组 reduce