SwiftArray
s 上是否有一个内置方法将其分成两部分,保留所有元素的顺序?
类似于 Array.prefix 和Array.suffix
的东西,合二为一?
我知道partition
和split
,但它们分别不保留顺序和大小。
例:
[1,2,3,5,6,2,3,5].cut(where: { $0 < 5 })
>>> ([1,2,3], [5,6,2,3,5])
恐怕没有这样的函数,这很遗憾,因为我现在已经需要好几次了。不过,自己动手很容易:
extension RangeReplaceableCollection {
func cut(where belongsInFirstHalf: (Element) -> Bool) -> (SubSequence, SubSequence) {
guard let splittingIndex = self.firstIndex(where: { !belongsInFirstHalf($0) }) else {
return (self[...], SubSequence())
}
return (
self[..<splittingIndex],
self[splittingIndex...]
)
}
}
print([1,2,3,5,6,2,3,5].cut(where: { $0 < 5 })) // => (ArraySlice([1, 2, 3]), ArraySlice([5, 6, 2, 3, 5]))
Swift 原生中没有内置的内容。我最好的建议是创建一个数组扩展并执行 findIndex 传入where
参数,然后基于此拆分数组。