地図

2017-01-17 13 views
0

は私が21歳地図

ある者のみが含まれます

let array = [one, two, three] 

は今、私は新しい配列を作成する必要がある配列を、持っている

let one = Person(name: "Joe", age:20) 
let two = Person(name: "Phil", age:21) 
let three = Person(name: "Moe", age:21) 

その後、いくつかのオブジェクトを持つオブジェクト

私は

var newArray : [Person] = array.map ({ $0.age = 21 }) 

してみてくださいコンパイラは、結果の型 '_?'を変換できないと言っています。予想されるタイプへ[人]

私は間違っていますか?

答えて

1

あなたがmapfilter機能を混乱されています

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

==の代わり=に注意してください。

filterは、元の配列からいくつかの項目を取ります。

mapは、元の配列から新しい項目にすべての項目を変換するために使用されます。ちょうどあなたの配列を変更する

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

map

3

はこれを試してみてください。要素を削除しません。

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

mapはelementBの配列にelementAのあなたの配列を変換するためです。クロージャー内のコードは、変換結果(各要素)を返す必要があります。

おそらくfilterを上記のように回答したいと思うかもしれません。等価比較(==、ただし=ではない)を使用する必要があります

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