我有一个功能
func doThing(inout array: [Int]) { //thing }
我有阵列
var stuff = [0,1,2,3,4,5,6]
我希望doThing
只对前三个元素进行操作。
doThing(&stuff[0..<3])
自
以来没有工作var partOfStuff: ArraySlice<Int> = stuff[0..<3]
且doThing
不接受ArraySlice
。我能想到的最好的事情是将stuff
嵌入AnyCollectionType
或其他类型擦除的结构中,并将doStuff
的参数更改为类型擦除类型。但这似乎不值得付出努力而且非常不优雅,我认为不使用inout
会更好。
有人有更好的方法吗?
答案 0 :(得分:0)
ArraySlice
是写时复制的,因此当您将其用作inout
时,您正在修改原始数组的副本。最好传递要修改的索引:
// Double the elements at the indicated indices
func doThing(inout array: [Int], onIndices indices: [Int]) {
for i in indices {
array[i] *= 2
}
}
var stuff = [0,1,2,3,4,5,6]
doThing(&stuff, onIndices: Array(0..<3))