我有一些对象
let one = Person(name: "Joe", age:20)
let two = Person(name: "Phil", age:21)
let three = Person(name: "Moe", age:21)
然后我有一个数组
let array = [one, two, three]
现在我需要创建一个新数组,它只包含年龄为21岁的人。
我试试
var newArray : [Person] = array.map ({ $0.age = 21 })
但是编译器说他无法转换结果类型' _?'预期类型[人]
我做错了什么?
答案 0 :(得分:4)
试试这个:
var newArray : [Person] = array.filter {$0.age == 21}
map
只需修改您的数组。它不会删除元素。
答案 1 :(得分:1)
您会混淆map
和filter
个功能:
var newArray : [Person] = array.filter ({ $0.age == 21 })
另请注意==
而不是=
。
filter
用于从原始数组中获取一些项目。
map
用于将原始数组中的所有项目转换为新项目。
答案 2 :(得分:1)
地图不是您期望的。 Map从数组中创建一个新数组。
let one = Person(name: "Joe", age:20)
let two = Person(name: "Phil", age:21)
let three = Person(name: "Moe", age:21)
let array = [one, two, three]
var newArray : [Int] = array.map ({ $0.age })
返回一个包含所有人年龄的新数组。 [20,21,21]
我认为您可能正在使用过滤器方法,
var newArray : [Person] = array.filter ({ $0.age == 21 })
答案 3 :(得分:0)
map
用于将您的elementA数组转换为elementB的数组。闭包内的代码必须返回转换结果(对于每个元素)。
也许你想要filter
如上所述。您必须使用相等的比较(==
,而不是=
)
var newArray : [Person] = array.filter {$0.age == 21}