我有一个问题。我正在测试prefix(while:)
的使用情况并收到不期望的结果。prefix(while:)
之后的元素数量缺少一个元素。从代码中可以看出名称前缀为Oleg的结构为5,但在prefix(while:)
之后返回4。
示例:
struct User {
let name: String
}
let users = [User(name : "Oleg 1"),User(name : "Oleg 2"),User(name : "Oleg 3"),User(name : "Oleg 4"),User(name : "Igor 1"),User(name : "Oleg 5"),User(name : "Max 1")]
print(users.prefix { $0.name.hasPrefix("Oleg") }.count) //4
答案 0 :(得分:3)
来自Array prefix
方法的文档:
返回包含初始元素的子序列,直到谓词返回false并跳过其余元素。
当代码到达“Igor 1”实例时,prefix
停止并返回第一个给出结果为4的子范围。
请勿混淆Array prefix
方法和String hasPrefix
方法。它们用于两种完全不同的东西。
也许你想使用filter
。
print(users.filter { $0.name.hasPrefix("Oleg") }.count) // 5