确定Swift字典是否不包含键并设置默认值
我有一个测验应用程序,应用程序内用户可以选择答案或否。如果用户跳过没有答案的问题,我想为该问题添加字典0值。如果选择A,我为B添加1,添加2,以此类推,直到E。在我的问题1中,键:1->表示问题1,值:1->表示答案。如果用户选择我添加的字典。如果用户跳过而没有任何答案,我不会添加答案确定Swift字典是否不包含键并设置默认值,swift,dictionary,Swift,Dictionary,我有一个测验应用程序,应用程序内用户可以选择答案或否。如果用户跳过没有答案的问题,我想为该问题添加字典0值。如果选择A,我为B添加1,添加2,以此类推,直到E。在我的问题1中,键:1->表示问题1,值:1->表示答案。如果用户选择我添加的字典。如果用户跳过而没有任何答案,我不会添加答案 userAnswerDict = [(key: 1, value: 4), (key: 2, value: 5), (key: 4, value: 4), (key: 6, value: 4), (key: 7
userAnswerDict = [(key: 1, value: 4), (key: 2, value: 5), (key: 4, value: 4), (key: 6, value: 4), (key: 7, value: 5), (key: 9, value: 2)
我的问题从这里开始。我想为key=3、key=5、key=8添加默认值=0。我的问题总数是20。我该怎么做呢?您可以像下面的代码一样轻松地为答案创建结构并对其进行管理:
struct Answer {
var questionId: Int
var answerValue: Int?
}
let answer1 = Answer(questionId: 1, answerValue: 5)
let answer2 = Answer(questionId: 2, answerValue: nil)
let arrAnswers = [answer1, answer2]
如果要将nil值替换为0,则可以使用以下函数:
let arrNewAnswers = arrAnswers.flatMap { (answer) -> Answer in
if answer.answerValue == nil {
return Answer(questionId: answer.questionId, answerValue: 0)
}
return answer
}
输出:
第一个数组包含nil值
printarrAnswers
[回答问题ID:1,回答值:可选5,回答问题ID:2,回答值:无]
第二个数组将0更新为零
printarrNewAnswers
[回答问题ID:1,回答值:可选5,回答问题ID:2,回答值:可选0]
我希望这将对您有所帮助。如果您只使用一个用全部0初始化的整数数组,对我来说似乎更容易,例如:
var answers = [Int](repeating: 0, count: 20)
然后,当用户回答索引问题时,您只需执行以下操作:
answers[index] = userAnswer //A number based on the choices option
或者,您可以通过以下方式访问问题的答案:
userSaidForIndexQuestion = answers[index] //Will be 0 if you never add an answer
希望对您有所帮助。字典实际上是一个元组数组。不鼓励您对持久数据使用元组。我的印象是,对于该任务,字典是错误的数据结构。为什么不使用var userAnswers=[Answer]之类的东西,而Answer可以是一个类或结构,甚至可以是一个带有case NoAnswer和GivenAnswerInt的枚举,并带有一个关联值。@vadian您的建议是什么?与luk2302相同s@luk2302,如何确定问题编号并给出答案?你们能解释一下你们的建议吗?我觉得我的回答是多余的。是的,我们可以删除它,因为答案允许为空值。