我遇到了问题,需要你的帮助。 我有对象数组
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)
答案 0 :(得分:1)
实际上您需要从数据集中删除重复项。 This link将帮助您实现目标。
但简而言之,请使用设置以避免重复数据。
答案 1 :(得分:0)
你可以reduce
数组:
let reducedArray: [Direction] = myArray.reduce([]) { result, direction in
result.contains(where: { $0.uniqueId == direction.uniqueId }) ? result : result + [direction]
}
显然,这段代码假设您只想检查ID是否重复,如果要检查整个对象是否重复,您可以为Equatable
类型实现Directions
协议,或者这样做:
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]
}