是布尔还是零比较更快?
问题描述:
我写在斯威夫特一个代码,我有一个类如下:是布尔还是零比较更快?
class Note
{
var isDeleted:Bool = false
var deletedDateTime:Date!
}
假设有一个充满Notes中的数据源,我想使基于比较的过滤器,那么我既可以比较isDeleted
或我可以比较deletedDateTime
。哪一个将从以下两个报表中更快:
var dataSource:[Note] = [Note]()
// fill the datasource with objects
dataSource.filter({$0.isDeleted == false}) // 1
dataSource.filter({$0.deletedDateTime == nil}) //2
任何人都可以请指导我吗?
答
如果您正在谈论执行时间,则不会有太大的时差。但是你的班级似乎有点显而易见,因为你可以删除不必要的布尔变量,因为你问的都是相同的。
+0
“不会有太大的时差。”其实,不会有任何时差。与64位字比较所需的时间相比,需要进行比较的时间是不相关的。两者都需要相同数量的周期。 – TheBasicMind
我相信检查是否会造成巨大的时差 –
我怀疑是否存在显着差异,但您测量的是什么? –
在最低级别,加载一个值并检查它是否为零。如果执行时间有所不同,它将在纳秒左右。不要担心这里的微观优化,而应该集中精力使代码尽可能清晰。 'boolean'值更加明确:测试'isDeleted'清楚地说明你在做什么。检查不存在的'deletedDateTime'是间接的;它并不清楚。一个很好的折衷办法是消除'boolean'值并拥有'isDeleted'属性。 –