Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays swift中对象数组中不同值的清除方法_Arrays_Swift - Fatal编程技术网

Arrays swift中对象数组中不同值的清除方法

Arrays swift中对象数组中不同值的清除方法,arrays,swift,Arrays,Swift,我有这样的模型课: struct AnswerModel:Decodable { let questionId,answerId:Int? var answer:Int? enum CodingKeys: String,CodingKey { case answer case questionId = "question"

我有这样的模型课:

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
self.userAnswers+=(pollsJson?.userAnswers)!
var seen=Set()
var unique=[PollsArray.AnswerModel]()
对于self.userAnswers中的元素{
if!seen.contains(element.questionId!){
唯一。追加(元素)
seen.insert(element.questionId!)
}
}
self.userAnswers=unique

因此,我接收具有唯一值的数组。也许有人会建议smth更好?

您可以使
应答器模型
符合
可散列
,定义自定义等式以仅检查
问题ID
,然后将
数组
转换为
集合
将自动删除重复项

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, answerId: 1, answer: 1)
    ]

let unique = Set(userAnswers) // {questionId 1, answerId 1, answer 1} and {questionId 2, answerId 1, answer 1}