防止序列為空

2021-09-19 06:37:58 字數 815 閱讀 2496

昨天在 swift-users 有人提問如何防止序列(sequence)為空。這個問題**於如何在斷言(predicate)中測試乙個序列,由此引發的問題是如果序列為空,會返回 true 來滿足斷言。

我們先不考慮這種處理是否有問題(我認為這種處理是正確的,因為乙個空序列裡沒有元素,對元素的斷言也就不會失敗),jeremy pereira 提出了乙個相當巧妙的解決方案:

func all(@noescape where predicate: generator.element throws -> bool) rethrows -> bool 

count += 1

}return count > 0

}

但從此討論中延伸出的另乙個大問題是「如何優雅地判斷乙個序列是否為空?」。我的方法是用緩衝區(buffer)並進行預處理。以下是我的第一次嘗試,粗糙不堪,請不吝指教。

public struct bufferedsequence:generatortype, sequencetype 

public mutating func next() -> base.generator.element?

}return bufferedelement

}public func isempty() -> bool

}

有趣的是,寫這個小東西最難的不是如何進行預處理,而是將 swift 3 的語法轉換回 swift 2.2,這樣我就能在 playground 中進行混編了。

你的語法轉換進行的怎樣了?已經全部轉換成 3 的語法了?還是堅守 2.2 寫生產**?

C 注意防止指標指向空

例子 static size t sn class employee employee const std string s name new std string s size t getid const std string getname const void print const empl...

Firebird如何防止空值擴散

在統計 計算 合併資料時,空值擴散問題,有時不經意冒出來,一不小心,就會導致結果出錯。我舉個例子。有乙個成績表achieve,有四個字段 yuwen shuxue yingyu total,分別用來儲存語文 數學 英語及總分。現在要計算學生的總分,現寫出如下sql語句 update achieve ...

在Firebird裡如何防止空值擴散

在統計 計算 合併資料時,空值擴散問題,有時不經意冒出來,一不小心,就會導致結果出錯。我舉個例子。有乙個成績表achieve,有四個字段 yuwen shuxue yingyu total,分別用來儲存語文 數學 英語及總分。現在要計算學生的總分,現寫出如下sql語句 update achieve ...