Mein folgender Code zeigt eine Frage und die zugehörige Antwort an, indem Sie ein Array von Schlüsseln und Werten aus einem Wörterbuch erstellen und sicherstellen, dass beide Arrays den gleichen Index haben, der gezogen wird. Nachdem jedoch eine Frage und ihre Antworten nach dem Zufallsprinzip ausgewählt wurden, möchte ich sie dauerhaft aus ihren jeweiligen Arrays entfernen, bis alle anderen Elemente im Array angezeigt wurden. Einfach ausgedrückt, wie kann ich sicherstellen, dass eine Frage und ein Satz von Antworten nicht erneut angezeigt werden, bis alle Elemente angezeigt werden oder bis der Benutzer eine falsche Antwort erhält? Ab jetzt stellt mein Code sicher, dass der gleiche Zufallsindex nicht zweimal hintereinander ausgewählt wird, wenn ich sicherstellen möchte, dass er überhaupt nicht zweimal angezeigt wird.Wie dauerhaft Element aus Array entfernen, nachdem es Index aufgerufen wird?
ist hier mein Code (SWIFT für iOS):
func randomQuestion() {
//random question
var questionList = Array(QADictionary.keys)
var rand = Int(arc4random_uniform(UInt32(questionList.count)))
questionLabel.text = questionList[rand]
//matching answers
var answerList = Array(QADictionary.values)
var choices = answerList[rand]
rightAnswerBox = arc4random_uniform(4)+1
//create button
var button:UIButton = UIButton()
var x = 1
for index in 1...4
{
button = view.viewWithTag(index) as! UIButton
if (index == Int(rightAnswerBox))
{
button.setTitle(choices[0], for: .normal)
}
else {
button.setTitle(choices[x], for: .normal)
x += 1
}
func removePair() {
questionList.remove(at: rand)
answerList.remove(at: rand)
}
randomImage()
}
}
let QADictionary = ["Who is Thor's brother?" : ["Atum", "Loki", "Red Norvell", "Kevin Masterson"], "What is the name of Thor's hammer?" : ["Mjolinr", "Uru", "Stormbreaker", "Thundara"], "Who is the father of Thor?" : ["Odin", "Sif", "Heimdall", "Balder"]]
Dieser Code reicht immer noch nicht für das aus, was ich erreichen möchte. Ich versuche sicherzustellen, sobald eine Frage aus dem Array gefragt wird, wird es nicht erneut gefragt –
Haben Sie es versucht? Sie müssen sich möglicherweise dorthin bewegen, wo Sie 'questionList.remove (at: rand)' an der entsprechenden Stelle aufrufen. Möchten Sie die Frage sofort bei der Auswahl entfernen oder nur, wenn sie richtig ist? – vacawama
Ja, als ich den Code geschrieben habe, wie du sagtest, habe ich einen Fehler unter dem passenden Antwortkommentar für die Auswahlvariable, die besagt: "Kann Wert von Nicht-Funktionstyp nicht aufrufen '[String: Array]'" –