在Swift中,是否有内置方法将数组拆分为前缀和后缀?

问题描述 投票:0回答:2

在Swift Array上是否有一个内置方法将其分为两部分,并保留所有元素的顺序?

类似于Array.prefixArray.suffix,合为一体?

我知道partitionsplit,但它们分别不保留顺序和大小。

示例:

[1,2,3,5,6,2,3,5].cut(where: { $0 < 5 })
>>> ([1,2,3], [5,6,2,3,5])
swift
2个回答
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]))

1
投票

Swift本身没有任何内置功能。我最好的建议是进行Array扩展,并执行findIndex传入where参数,然后基于该参数拆分Array。]

© www.soinside.com 2019 - 2024. All rights reserved.