使用自定义对象映射

时间:2017-01-17 10:27:22

标签: swift

我有一些对象

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 })

但是编译器说他无法转换结果类型' _?'预期类型[人]

我做错了什么?

4 个答案:

答案 0 :(得分:4)

试试这个:

var newArray : [Person] = array.filter {$0.age == 21}

map只需修改您的数组。它不会删除元素。

答案 1 :(得分:1)

您会混淆mapfilter个功能:

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}