【发布时间】:2015-07-11 15:11:52
【问题描述】:
这只是作为“我知道它是如何工作的,但不知道它应该是什么时刻”之一突然出现在我的脑海中。假设我有一个数组:
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 }
问题:
是否保证结果会按照原始数组的顺序,即
names = ["John", "Mike", "Emma"]和ages = [24, 21, 23]?如果第一个问题的答案是否定的,是否可以保证
names和ages同步?
【问题讨论】:
-
@AntonBronnikov 你有这方面的参考吗?轶事证据是它们是按原始顺序排列的,但我不知道苹果将来是否会为
map实施并行版本,从而改变顺序。 -
不,我没有参考资料(无法在 5 分钟内找到它)。这就是我在评论中回答的原因。我的想法是,
Array采用SequenceType协议,其中有map(),这意味着映射将按照序列的顺序进行,如果是数组,则为数组的顺序。