Arrays 一个简单的;拼接;Swift中数组的类型方法?

Arrays 一个简单的;拼接;Swift中数组的类型方法?,arrays,swift,Arrays,Swift,我正在寻找一种优雅的方法来选择数组中的一系列元素以移除并返回,从而改变原始数组。Javascript有一个用于此目的的splice方法,但我似乎找不到任何东西可以在Swift中实现这两个步骤: var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] let oneTwoThree = array.removeAndReturn(0...2) // [1, 2, 3] // array == [4, 5, 6, 7, 8, 9, 10] 我知道关于dropFi

我正在寻找一种优雅的方法来选择数组中的一系列元素以移除并返回,从而改变原始数组。Javascript有一个用于此目的的
splice
方法,但我似乎找不到任何东西可以在Swift中实现这两个步骤:

var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

let oneTwoThree = array.removeAndReturn(0...2) // [1, 2, 3]

// array == [4, 5, 6, 7, 8, 9, 10]
我知道关于
dropFirst(:)
prefix(:)
removeSubrange(:)
,但它们要么只返回值而不改变原始数组,要么改变原始数组而不返回值


我是否还错过了另一个烘焙方法,或者我必须实现一个自定义扩展/方法才能实现此功能?

removeFirst()
removeLast()
remove(at:)
方法可以删除 并返回单个集合元素,但没有类似的方法来删除并返回子范围,因此您必须实现自己的方法

一个可能的实现是

extension RangeReplaceableCollection {
    mutating func splice<R: RangeExpression>(range: R) -> SubSequence
    where R.Bound == Index {
        let result = self[range]
        self.removeSubrange(range)
        return result
    }
}
扩展RangeReplaceableCollection{
突变func拼接(范围:R)->子序列
其中R.Bound==索引{
让结果=自我[范围]
self.removeSubrange(范围)
返回结果
}
}
示例:

var a = [0, 1, 2, 3, 4, 5, 6, 7, 8]
print(a.splice(range: 3...4), a) // [3, 4] [0, 1, 2, 5, 6, 7, 8]
print(a.splice(range: ..<2), a)  // [0, 1] [2, 5, 6, 7, 8]
print(a.splice(range: 2...), a)  // [6, 7, 8] [2, 5]

var data = Data(bytes: [1, 2, 3, 4])
let splice = data.splice(range: 2...2)
print(splice as NSData) // <03>
print(data as NSData)   // <010204>
var a=[0,1,2,3,4,5,6,7,8]
打印(a.拼接(范围:3…4),a)/[3,4][0,1,2,5,6,7,8]
打印(a)拼接(范围:。。