2017-10-09 61 views
-1

爲什麼會產生Elena而不是PaulaSwift`顛倒了()`不訂購我以爲會怎麼樣

let names = ["Paula", "Elena", "Zoe"] 

var lastNameEndingInA: String? 

for name in names.reversed() where name.hasSuffix("a") { 
lastNameEndingInA = name 
break 
} 

lastNameEndingInA // Optional("Elena")」 

我本來以爲names.reversed()[「Zoe」, 「Paula」, 「Elena」],然後在那裏name.hasSuffix(「a」)將跳過「佐伊」,然後去「保」,然後break所以lastNameEndingInA將是「保」?

我不明白爲什麼它不像那樣工作。

+1

只是刪除關鍵字break –

+1

你逆轉陣列是「佐伊」,「埃琳娜」,「寶拉」。你爲什麼會認爲它會是「佐伊」,「寶拉」,「埃琳娜」? – rmaddy

+0

@rmaddy你說得對。我想的是反向排序,而不是顛倒過來。我需要names.reversed()。sorted。謝謝! – SRMR

回答

3

你的陣列是[「Paula」,「Elena」,「Zoe」]。當被顛倒時,它是[「Zoe」,「Elena」,「Paula」]。沒有理由認爲它會是[「Zoe」,「Paula」,「Elena」]。所以你的代碼按預期工作。

但它可以更容易地寫爲:

let lastNameEndingInA = names.reversed().first { $0.hasSuffix("a") } 

你想要的名稱排序反向,然後找到了比賽,這樣做:

let lastNameEndingInA = names.sorted().reversed().first { $0.hasSuffix("a") } 
+0

是的,我應該這樣做!我會在8分鐘內讓你的答案正確無誤。謝謝! – SRMR

+1

而不是'names.sorted()。reversed()'來反轉排序,使用'names.sorted(by:>)'。 – vacawama