我有一个布尔数组
例如:
var myBool: [Bool] = [true, true, false, true ,false]
我想将所有元素从索引 1 更改为索引 3
像这样:
myBool[1...3] = true // [true, true, true, true, false]
我不想使用 for 循环,因为我有一个非常大的数组,它变化很快,而且循环太慢了,无法处理这种变化。
任何可变集合都会响应replaceSubrange:with:
var myBool = [true, true, false, true, false]
myBool.replaceSubrange(1...3, with: Array(repeating: true, count: 3))
或(归功于马丁·
var myBool = [true, true, false, true, false]
let range = 1...3
myBool.replaceSubrange(range, with: repeatElement(true, count: range.count))
如果不遍历要更改的数组的所有索引,就无法实现此目的,因此无论您如何实现此目的,更改的最小复杂度都将是相同的 - 即使您不直接使用循环,底层实现也必须使用循环。
您可以将值直接分配给数组中的一系列索引,但您需要分配另一个ArraySlice
,而不是单个Element
。
var myBool: [Bool] = [true, true, false, true ,false]
let range = 1...3
myBool[range] = ArraySlice(range.map { _ in true })
请记住,其复杂性与 for 循环相同。如果您遇到缓慢,那很可能不是因为 for 循环。