为什么这会产生Elena
而不是Paula
?
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”)
会跳过“Zoe”,然后转到“Paula”然后break
所以{{1会是“宝拉”吗?
我无法弄清楚为什么它不能像那样工作。
答案 0 :(得分: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") }