是布尔还是零比较更快?

问题描述:

我写在斯威夫特一个代码,我有一个类如下:是布尔还是零比较更快?

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

我相信检查是否会造成巨大的时差 –

+0

我怀疑是否存在显着差异,但您测量的是什么? –

+0

在最低级别,加载一个值并检查它是否为零。如果执行时间有所不同,它将在纳秒左右。不要担心这里的微观优化,而应该集中精力使代码尽可能清晰。 'boolean'值更加明确:测试'isDeleted'清楚地说明你在做什么。检查不存在的'deletedDateTime'是间接的;它并不清楚。一个很好的折衷办法是消除'boolean'值并拥有'isDeleted'属性。 –

如果您正在谈论执行时间,则不会有太大的时差。但是你的班级似乎有点显而易见,因为你可以删除不必要的布尔变量,因为你问的都是相同的。

+0

“不会有太大的时差。”其实,不会有任何时差。与64位字比较所需的时间相比,需要进行比较的时间是不相关的。两者都需要相同数量的周期。 – TheBasicMind