2015-07-11 24 views
2

這只是彈出我的頭,雖然「我知道它是如何工作,但不知道它應該是什麼時刻」。比方說,我有一個數組:由地圖返回的數組的順序

struct Person { 
    var name : String 
    var age : Int 
} 

var people = [Person]() 
people.append(Person(name: "John", age: 24)) 
people.append(Person(name: "Mike", age: 21)) 
people.append(Person(name: "Emma", age: 23)) 

而且我要地圖people兩個姓名和年齡不同的陣列:

let names = people.map { $0.name } 
let ages = people.map { $0.age } 

問題:

  1. 是否有保證結果將按原始數組的順序排列,即names = ["John", "Mike", "Emma"]ages = [24, 21, 23]

  2. 如果第一個問題的答案是否定的,是否有保證namesages是同步的?

+1

1.是的,有 – courteouselk

+0

@AntonBronnikov你有參考嗎?軼事證據是,它們是按照原始順序進行的,但我不知道蘋果是否會在未來實施一個用於'map'的並行版本,這會改變順序。 –

+0

不,我沒有參考資料(5分鐘內無法釣魚)。這就是我在評論中回答的原因。我的想法是,'Array'採用'SequenceType'協議,其中有'map()',這意味着映射將按照序列的順序完成,在數組的情況下是數組的順序。 – courteouselk

回答

2

是的,和here's your source

「將提供的閉包應用於每個數組元素後,映射(_ :)方法返回一個包含所有新映射值的新數組,其順序與原始數組中的對應值相同。