gpt4 book ai didi

swift - 如何创建衡量算法时间性能的函数?

转载 作者:搜寻专家 更新时间:2023-11-01 06:25:51 24 4
gpt4 key购买 nike

如果我想使用 Date()Dispatch() 评估一些算法的时间性能,我该如何创建执行此操作的函数?

例如这个二进制搜索算法。我怎样才能将它作为闭包参数传​​递并让闭包使用下面的任何 Swift 计时方法进行所有时间性能测量?请用一个闭包的例子来回答。谢谢。

让 startingPoint = Date()
让 startingPoint = Dispatch().now


    func binarySearchForValue(searchValue: Int, array: [Int]) -> Bool {

var leftIndex = 0
var rightIndex = array.count - 1

while leftIndex <= rightIndex {

let middleIndex = (leftIndex + rightIndex) / 2
let middleValue = array[middleIndex]

if middleValue == searchValue {
return true
}

if searchValue < middleValue {
rightIndex = middleIndex - 1
}

if searchValue > middleValue {
leftIndex = middleIndex + 1
}
}
return false
}

最佳答案

由于您可能想要测量不同的函数,因此在闭包中捕获函数的参数而不是将它们的类型包含在签名中可能是有意义的。但我确实为返回值使用了泛型类型。我希望这就是您所追求的:

func measure<R>(_ label: String, operation: () -> R) -> R {
let start = DispatchTime.now()
let result = operation()
let end = DispatchTime.now()
let nanoTime = end.uptimeNanoseconds - start.uptimeNanoseconds
let timeInterval = Double(nanoTime) / 1_000_000_000
print(String(format: "%@: %.9f s", label, timeInterval))
return result
}

使用方法如下:

let result = measure("search") { binarySearchForValue(searchValue: 3, array: [1, 3, 8]) }
print(result) // that's the result of the function that was measured, not the measurement

measure("some function") { functionWithoutReturnValue() }

如果函数没有返回值,R 将是 (),所以这也应该有效。只是不要将结果分配给任何东西(见上面的例子)。如果你想对测量结果做一些事情而不是将它打印到控制台,你也可以这样做。但是您没有在问题中具体说明,所以我选择了 print

关于swift - 如何创建衡量算法时间性能的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54965869/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com