如何枚举每两个元素的集合,而不是Swift中的[[1,2],[2,3],[3,4]]



如何枚举每两个元素的集合(如[1、2、3、4](,而不是Swift中的[[1, 2], [3, 4]],而是[[1,2], [2, 3], [3, 4]]

更喜欢像forEach这样的方法,但在这个问题中是forEachTwo

collections.forEachTwo { (first, second) in
// do something.
}
for (first, second) in zip(elements, elements.dropFirst()) {
print(first, second)
}

forEach(或导数(在这里不适合迭代。最好使用for-inforEach有副作用(打破FP(和与Swift的微妙怪异(打破好Swift(。for-in更强大、更清洁。但实际序列的创建是经典的FP:zip和dropFirst。

请注意,这是一个元组序列,而不是您所写的数组。考虑到您建议的语法,我认为您不希望在这里使用数组(尽管如果使用map,您可以实现这一点(。

你可以用它得到你建议的语法,但它不像for-in那样灵活,并且有微妙的边缘情况(例如,如果闭包包括return,它的行为就像continue(:

extension Sequence {
func forEachTwo(_ f: ((Element, Element) -> Void)) {
for element in zip(self, dropFirst()) {
f(element.0, element.1)
}
}
}

最新更新