【问题标题】:Swift Array remove only one item with a specific valueSwift Array 仅删除具有特定值的一项
【发布时间】:2016-12-04 16:00:20
【问题描述】:

好吧,这应该不会太难,但星期天早上证明我错了......

我有一个带有结构的Array,并且只想删除一个与其名称属性匹配的结构到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)

结果:

[Person(name: "Jim"), Person(name: "Julie")]

但是我如何只删除 一个 Bob?

【问题讨论】:

  • 告诉我这两个 Bob 有什么区别,然后我会告诉你如何。但如果没有,您可以设置一个 bool 标志,这样一旦过滤器设置为 false,它就会退出循环
  • 这两个Bob完全一样,它们是彼此的克隆,但我只想删除其中一个。
  • 我很好奇你为什么要使用这样的功能?是删除重复项吗?还是别的什么?
  • Person 只是一个例子。我可以使用不同的示例,例如不同颜色的球,然后移除一个红球。或者在河里钓鱼,捕获(去除)一条鲑鱼,等等。

标签: arrays swift3


【解决方案1】:
  • filter 过滤所有符合条件的项目

  • index 返回与条件匹配的第一项的索引。

    func removePersonsWith(name: String) {
        if let index = myPersons.index(where: {$0.name == name}) {
            myPersons.remove(at: index)
        }
    }
    

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

【讨论】:

  • 我认为这不是 OP 最终想要的。他想删除除一个以外的所有内容,即如果他有 5 个 Bob,他想删除其中的 4 个,这会删除其中的 1 个。 Koen,请告诉我们你想要什么。否则很好的答案
  • 不,我只想删除一个 Bob
猜你喜欢
  • 2018-11-06
  • 2016-11-15
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多