Swift Array 仅删除具有特定值的一项

koe*_*oen 3 arrays swift3

好吧,这应该不会太难,但周日早上证明我错了......

我有一个Arraywith 结构,并且只想删除一个与其 name 属性匹配的结构String。例如:

struct Person {
   let name: String
}

var myPersons =
[Person(name: "Jim"),
 Person(name: "Bob"),
 Person(name: "Julie"),
 Person(name: "Bob")]

func removePersonsWith(name: String) {
   myPersons = myPersons.filter { $0.name != name }
}

removePersonsWith(name: "Bob")
print(myPersons)
Run Code Online (Sandbox Code Playgroud)

结果是:

[Person(name: "Jim"), Person(name: "Julie")]
Run Code Online (Sandbox Code Playgroud)

但我怎样才能只删除一个鲍勃呢?

vad*_*ian 7

  • filter过滤所有符合条件的项目。

  • firstIndex返回第一个符合条件的项目的索引。

      func removePersonsWith(name: String) {
          if let index = myPersons.firstIndex(where: {$0.name == name}) {
              myPersons.remove(at: index)
          }
      }
    
    Run Code Online (Sandbox Code Playgroud)

然而,该函数的名称具有误导性。应该是removeAPersonWith;-)