2017-08-02 55 views
0

我寫在斯威夫特一個代碼,我有一個類如下:是布爾還是零比較更快?

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

如果您正在談論執行時間,則不會有太大的時差。但是你的班級似乎有點顯而易見,因爲你可以刪除不必要的布爾變量,因爲你問的都是相同的。

+0

「不會有太大的時差。」其實,不會有任何時差。與64位字比較所需的時間相比,需要進行比較的時間是不相關的。兩者都需要相同數量的週期。 – TheBasicMind