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}