做者:Erica Sadun,原文連接,原文日期:2016-06-28
譯者:Martin_Joy;校對:bestswifter;定稿:CMBgit
今天的挑戰題出自 Swift Users 郵件組的 Adriano Ferreira 。他的出發點是想要簡化鏈式調用,可是不少狀況下,想要使代碼更 Swifter ,僅僅依靠看起來漂亮的鏈式語法是不夠的。github
func selectionSort(_ array: [Int]) -> [Int] { guard array.count > 1, let minElement = array.min() else { return array } let indexOfMinElement = array.index(of: minElement)! // All of this just to filter out the first smallest element and return the rest // Also tried ‘suffix(from:)' here, but couldn’t make it work properly let rest = array.enumerated() .filter({ index, _ in index != indexOfMinElement }) .map({ _, element in element }) return [minElement] + selectionSort(rest) }
首先,實用性。即便對於零個或一個元素的數組,我不認爲添加代碼去測試這些條件是實用的。我認爲讓代碼直接順序執行是更好的選擇,即便這樣對於只有一個元素的狀況不是特別完美。swift
其次,連貫性。我不喜歡先找到最小值,而後再去找它的索引的想法。而枚舉是容許將這兩個操做串聯起來的。數組
第三,風格。數組的遍歷應該返回元組類型 (index: Index, value: Element)
。可是示例並無這麼作,因此我想要藉此機會來擴展數組,使其支持這種類型的元組。同時,個人方案比他須要的答案更復雜一些,由於我想要使用 $0.value
與 $1.index
,而不是使用 $0.1
和 $1.0
。測試
我從新設計的代碼在這裏,請你也分享你的那一份吧!this
本文由 SwiftGG 翻譯組翻譯,已經得到做者翻譯受權,最新文章請訪問 http://swift.gg。翻譯