我需要检查两个IntArray对象中的值是否相差不超过1。
这是工作代码,花费的时间太长:
var pixelOutsideOfTolerance = false
val PIXEL_VALUE_TOLERANCE = 1
for (i in 0 until pixels1.lastIndex) {
if (pixels1[i] - pixels2[i] > PIXEL_VALUE_TOLERANCE && pixels1[i] - pixels2[i] < - PIXEL_VALUE_TOLERANCE) {
pixelOutsideOfTolerance = true
}
}
// Do something with pixelOutsideOfTolerance
有什么更有表现力和说服力的方式来做到这一点?
1条答案
按热度按时间8tntrjer1#
在修复性能之前,必须确保正确性:
lastIndex
是实际的最后一个索引,而不是大小。使用for (i in pixels1.indices)
代替显式范围以避免这类错误&&
而不是||
。使用abs(pixels1[i] - pixels2[i]) > PIXEL_VALUE_TOLERANCE
而不是更复杂的条件,检查肯定和否定,它将更容易阅读,更不可能出错(您将需要import kotlin.math.abs
)现在,即使你已经知道某些像素差异超出了容差,你还是在执行整个循环。为这个循环提取一个函数,并在满足“超出容差”条件时提前返回。
应用上述内容,您现在应该有:
如果性能不是一个要求,你也可以在这里使用一个更实用的方法。
或者:
但是,如果这真的是一个热门的路径,你试图加快,这将是适得其反,因为拳击。