使用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方法实现数组内对象的同属性运算