【发布时间】:2015-06-10 15:51:07
【问题描述】:
考虑以下愚蠢的简单示例:
let arr = ["hey", "ho"]
let doubled = arr.map {$0 + $0}
let capitalized = arr.map {$0.capitalizedString}
如您所见,我正在以多种方式处理相同的初始数组,以便最终得到多个处理过的数组。
现在想象arr 很长,并且我有许多这样的进程生成许多最终数组。我不喜欢上面的代码,因为我们循环了多次,每个map 调用一次。我宁愿只循环一次。
现在,显然我们可以通过蛮力来处理这个问题,即从多个可变数组开始并在每次迭代中写入所有数组:
let arr = ["hey", "ho"]
var doubled = [String]()
var capitalized = [String]()
for s in arr {
doubled.append(s + s)
capitalized.append(s.capitalizedString)
}
很好。但是现在我们没有得到使用map 的乐趣。所以我的问题是:有没有更好、更快捷的方式?我以一种模糊的方式想象自己使用map 或map 之类的东西来生成类似元组的东西,并在我们迭代时神奇地将元组拆分成所有结果数组,就好像我可以说这样的话(伪代码,不要在家里尝试这个):
let arr = ["hey", "ho"]
let (doubled, capitalized) = arr.map { /* ???? */ }
如果我正在设计自己的语言,我什至可能允许通过赋值到左值伪数组中进行某种喷溅:
let arr = ["hey", "ho"]
let [doubled, capitalized] = arr.map { /* ???? */ }
做不到也没什么大不了,但能这样说话会很有趣。
【问题讨论】:
-
那么这里的目标仅仅是一个更简洁的语法吗?您的原始代码有 2 个
map调用,应该比循环一次的效率略低,但在多进程的情况下具有更可并行化的优势,这似乎是可取的。 -
@JackWu 哦,是的,这纯粹是一个句法梦想。我什至不知道我正在做的事情是否特别低效。我没有过早优化,只是盯着我的代码思考。
标签: arrays swift dictionary