斯威夫特`逆转()`没有按我的想法排序

时间:2017-10-09 01:49:36

标签: swift

为什么这会产生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会是“宝拉”吗?

我无法弄清楚为什么它不能像那样工作。

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") }