作者:Erica Sadun尝偎,原文鏈接白粉,原文日期:2016-06-28
譯者:Martin_Joy讯壶;校對(duì):bestswifter揽浙;定稿:CMB
今天的挑戰(zhàn)題出自 Swift Users 郵件組的 Adriano Ferreira 。他的出發(fā)點(diǎn)是想要簡化鏈?zhǔn)秸{(diào)用意敛,但是很多情況下馅巷,想要使代碼更 Swifter ,僅僅依靠看起來漂亮的鏈?zhǔn)秸Z法是不夠的草姻。
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)
}
如何使其更 Swifter
首先钓猬,實(shí)用性。即使對(duì)于零個(gè)或一個(gè)元素的數(shù)組撩独,我不認(rèn)為添加代碼去測試這些條件是實(shí)用的敞曹。我認(rèn)為讓代碼直接順序執(zhí)行是更好的選擇账月,即使這樣對(duì)于只有一個(gè)元素的情況不是特別完美。
其次澳迫,連貫性局齿。我不喜歡先找到最小值,然后再去找它的索引的想法橄登。而枚舉是允許將這兩個(gè)操作串聯(lián)起來的抓歼。
第三,風(fēng)格拢锹。數(shù)組的遍歷應(yīng)該返回元組類型 (index: Index, value: Element)
谣妻。但是示例并沒有這么做,所以我想要借此機(jī)會(huì)來擴(kuò)展數(shù)組卒稳,使其支持這種類型的元組蹋半。同時(shí),我的方案比他需要的答案更復(fù)雜一些充坑,因?yàn)槲蚁胍褂?$0.value
與 $1.index
减江,而不是使用 $0.1
和 $1.0
。
我重新設(shè)計(jì)的代碼在這里匪傍,請(qǐng)你也分享你的那一份吧您市!
本文由 SwiftGG 翻譯組翻譯,已經(jīng)獲得作者翻譯授權(quán)役衡,最新文章請(qǐng)?jiān)L問 http://swift.gg茵休。