0

我有一个功能

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不接受ArraySlices。我能想到的最好的事情是嵌入stuffAnyCollectionType或其他一些类型擦除的结构中,并将 的参数更改为doStuff类型擦除的类型。但这似乎不值得付出努力并且非常不雅,我认为不使用inout会更好。

有人有更好的方法吗?

4

1 回答 1

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))
于 2016-05-24T03:01:34.653 回答