在Swift Array
上是否有一个内置方法将其分为两部分,并保留所有元素的顺序?
类似于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本身没有任何内置功能。我最好的建议是进行Array扩展,并执行findIndex传入where
参数,然后基于该参数拆分Array。]