Swift序列前缀(而:)不返回所有元素

时间:2017-04-14 17:49:56

标签: arrays swift sequence

我有一个问题。我正在测试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

1 个答案:

答案 0 :(得分:3)

来自Array prefix方法的文档:

  

返回包含初始元素的子序列,直到谓词返回false并跳过其余元素。

当代码到达“Igor 1”实例时,prefix停止并返回第一个给出结果为4的子范围。

请勿混淆Array prefix方法和String hasPrefix方法。它们用于两种完全不同的东西。

也许你想使用filter

print(users.filter { $0.name.hasPrefix("Oleg") }.count) // 5