如何在没有循环 Swift 的情况下更改数组中的值



我有一个布尔数组

例如:

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 循环。

最新更新