将已定义数组中的所有值设置为trueor的最优雅方法是什么false?我正在考虑不使用for循环。
我目前正在使用仅使用TRUE值重新初始化数组的想法,我很好奇是否存在更好的方法。
您可以分配true具有相同元素计数的新值数组:
var array = [true, false, false]
array = Array(repeating: true, count: array.count)
print(array) // [true, true, true]
Run Code Online (Sandbox Code Playgroud)
但有趣的是,true在 for 循环中赋值
for i in array.indices { array[i] = true }
Run Code Online (Sandbox Code Playgroud)
快得多。这是一个简单的基准测试:
let N = 1_000_000
do {
var array = (1...N).map { _ in arc4random_uniform(2) == 0 }
let start = Date()
array = Array(repeating: true, count: array.count)
let end = Date()
print("Assign new array:", end.timeIntervalSince(start))
}
do {
var array = (1...N).map { _ in arc4random_uniform(2) == 0 }
let start = Date()
array = array.map { _ in true }
let end = Date()
print("Using map(): ", end.timeIntervalSince(start))
}
do {
var array = (1...N).map { _ in arc4random_uniform(2) == 0 }
let start = Date()
for i in array.indices { array[i] = true }
let end = Date()
print("Using for-loop: ", end.timeIntervalSince(start))
}
Run Code Online (Sandbox Code Playgroud)
结果(在 1.2 GHz Intel Core m5 MacBook 上,以 Release 模式编译):
分配新数组:0.00120103359222412 使用 map(): 0.00364589691162109 使用 for 循环:0.000528931617736816
这是另一种方法,因为您不喜欢 Martin 使用 给出的更有效的答案array = Array(repeating: true, count: array.count)。
var boolArr = [true, false, false, true] // your existing array
boolArr = boolArr.map { _ in true }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
568 次 |
| 最近记录: |