如何解决快速清除对象数组中不同值的方法
我有这样的模型课:
struct AnswerModel:Decodable {
let questionId,answerId:Int?
var answer:Int?
enum CodingKeys: String,CodingKey {
case answer
case questionId = "question"
case answerId = "answer_id"
}
}
,有时此对象的数组可以包含具有相似的questionId
的元素。我是这样区分的:
self.userAnswers += (pollsJson?.userAnswers)!
var seen = Set<Int>()
var unique = [PollsArray.AnswerModel]()
for element in self.userAnswers{
if !seen.contains(element.questionId!) {
unique.append(element)
seen.insert(element.questionId!)
}
}
self.userAnswers = unique
因此,我收到具有唯一值的数组。也许有人会建议更好一点?
解决方法
您可以使AnswerModel
符合Hashable
,定义自定义等式以仅检查questionId
,然后将Array
转换为Set
将删除重复项自动。
extension AnswerModel: Hashable {
func hash(into hasher: inout Hasher) {
hasher.combine(questionId)
}
static func == (lhs: AnswerModel,rhs: AnswerModel) -> Bool {
lhs.questionId == rhs.questionId
}
}
测试代码:
let userAnswers = [
AnswerModel(questionId: 1,answerId: 1,answer: 1),AnswerModel(questionId: 1,answerId: 2,answer: 3),AnswerModel(questionId: 2,answer: 1)
]
let unique = Set(userAnswers) // {questionId 1,answerId 1,answer 1} and {questionId 2,answer 1}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。