微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

快速清除对象数组中不同值的方法

如何解决快速清除对象数组中不同值的方法

我有这样的模型课:

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 举报,一经查实,本站将立刻删除。