枚举函数为数组中由索引和该项的值组成的每个项目返回元组。
map 函数返回根据为数组中的每个元素应用提供的转换闭包的结果构建的元素数组。
声明:
func map<U>(transform: (T) -> U) -> [U]
var numbers = [1, 2, 3]
numbers = map(numbers) { (index, element) in
index + element
} //[1, 3, 5]
这很好。作品。
var numbers = [1, 2, 3]
var result = map(enumerate(numbers)) { (index, element) in
index + element
} //[1, 3, 5]
map
期望一个数组作为第一个参数,但是由于枚举函数,我把元组放在那里。
问题是:为什么工作?
答案 0 :(得分:2)
它的工作原理是因为除了具有map
方法的数组外,还有map
函数可以采用任何类型的SequenceType
:
func map<S : SequenceType, T>(source: S, transform: (S.Generator.Element) -> T) -> [T]
这不仅适用于数组,还适用于任何类型的序列 - 字符串,范围,压缩的序列对以及enumerate
的结果,它也是一个序列:
// enumerate is a function that takes any kind of sequence, and returns
// an EnumerateSequence object
func enumerate<Seq : SequenceType>(base: Seq) -> EnumerateSequence<Seq>
EnumerateSequence
是一种类型,它保留另一个序列(在您的情况下,数组[1,2,3]
),然后在被要求生成元素时,从其包含的序列生成下一个元素以及递增数字。
答案 1 :(得分:0)
您想查看以下答案:What's the cleanest way of applying map() to a dictionary in Swift?
map函数对元组起作用,因为它使用了可在任何SequenceType
上运行的swift标准库中的map函数。所以它实际上是使用枚举的索引和值,它与map函数在查看数组输入时使用的索引和元素相同。