【问题标题】:Remove objects from array of objects swift [duplicate]快速从对象数组中删除对象[重复]
【发布时间】:2017-06-07 18:50:01
【问题描述】:

我有一个问题,需要你的帮助。 我有对象数组

var arrayDirection: [Directions]

每个对象都有属性:

var name: String?
var uniqueId: Int?

我只需要找到并留下一个对象,其属性值与该数组中另一个对象的属性值重复。

例如我在控制台打印:

for object in arrayDirection {
    print(object.name, object.uniqueId)
}

看看:

可选的("name1") 可选的(833)

可选的("name1") 可选的(833)

可选的("name2") 可选的(833)

可选的("name4") 可选的(833)

可选的("name1") 可选的(833)

可选的("name1") 可选的(862)

所以,我需要删除 Optional("name1") Optional(833),因为数组中有 3 个,我希望看到的结果只有一个:

可选的("name1") 可选的(833)

可选的("name2") 可选的(833)

可选的("name3") 可选的(833)

可选的("name1") 可选的(862)

【问题讨论】:

标签: ios arrays swift object


【解决方案1】:

实际上,您需要从数据集中删除重复项。 This link 将帮助您实现目标。

不过总之,使用Set来避免重复数据。

【讨论】:

  • 是的,我明白了,但是如何为几个属性做呢?
  • 如果这个回答有帮助,希望你也采纳。 :)
【解决方案2】:

你可以reduce数组:

let reducedArray: [Direction] = myArray.reduce([]) { result, direction in
   result.contains(where: { $0.uniqueId == direction.uniqueId }) ? result : result + [direction]
}

显然,这段代码假设您只想检查 ID 是否重复,如果您想检查整个对象是否重复,您可以为您的 Directions 类型实现 Equatable 协议,或者这样做:

let reducedArray: [Direction] = myArray.reduce([]) { result, direction in
   result.contains(where: { $0.uniqueId == direction.uniqueId && $0.name == direction.name }) ? result : result + [direction]
}

通过实现Equatable 协议,它实际上变得非常简单:

let reducedArray: [Direction] = myArray.reduce([]) { result, direction in
   result.contains(where: { $0 == direction }) ? result : result + [direction]
}

【讨论】:

    猜你喜欢
    • 2020-07-15
    • 2017-07-11
    • 2013-01-17
    • 1970-01-01
    • 2018-08-28
    • 2023-03-06
    • 2020-04-15
    • 2016-03-12
    • 2021-07-01
    相关资源
    最近更新 更多