gpt4 book ai didi

arrays - 将更改后的数组重置为其原始值 Swift

转载 作者:行者123 更新时间:2023-11-28 05:38:42 24 4
gpt4 key购买 nike

我有一个数组。我需要使用随机数生成器循环遍历所有数组元素并且不希望出现重复项。

编码新手,我通过在使用后将数组元素值设置为“”来即兴创作。

再次选择数组元素时,我检查新数组的数组元素值是否与原来的相等。如果不是,我输入一个新的随机索引号并重试。


这适用于下面显示的两种方式,直到 restart (startover())

但是

''' 当我设置 remainingQuestions = allQuestions -它在重新启动后不起作用。 结果 = 每次重新启动时文本的(“”/空白)值的数量增加。

''' 当我设置 remainingQuestions = questionBank() -它总是有效

但是为什么>.<

澄清:我不明白以上两者之间的区别。两者应该指向同一个数组?为什么一个工作,一个不工作。我所做的只是将 remainingQuestions 指向一个包含相同数组的变量。

我的代码没有工作代码//注释掉:

//Model: File - Question ------------------------------------------

class Question {

var questionText : String
let answer : Bool

init(text: String, correctAnswer: Bool) {
questionText = text
answer = correctAnswer
}
}

//Model: File - QuestionBank --------------------------------------

class QuestionBank {
var list = [question]()

init() {

list.append(Question(text: "", correctAnswer: ""))
}
}

//Controller: File - ViewController -------------------------------

var remainingQuestions = QuestionBank()
//var allQuestions = QuestionBank()
var questionNumber = Int.random(in: 0..<13)
var count : Int = 0

//Iteration snippet: ------------------------------------------

@IBAction func answerPressed(_ sender: AnyObject) {

count += 1

remainingQuestions.list[questionNumber].questionText = ""

questionNumber = Int.random(in: 0..<13)

nextQuestion()


}

func nextQuestion() {
if count < 13 {
if remainingQuestions.list[questionNumber].questionText == questionBank().list[questionNumber].questionText {
//this works
//if remainingQuestions.list[questionNumber].questionText == allQuestions.list[questionNumber].questionText {
//this works until startOver()

questionLabel.text = remainingQuestions.list[questionNumber].questionText

} else {
questionNumber = Int.random(in: 0..<13)
nextQuestion()
}

} else {
startOver()
}

func startOver() {
count = 0
score = 0
remainingQuestions = QuestionBank() //This works
// remainingQuestions = allQuestions (This doesn't work (why!?))
nextQuestion()
}

最佳答案

我会做一些不同的事情。您的示例中缺少相当多的代码,因此需要进行一些更改,但这里是要点:

import UIKit

class Question {

let questionText : String
let answer : Bool

init(text: String, correctAnswer: Bool) {
questionText = text
answer = correctAnswer
}
}

//Model: File - QuestionBank --------------------------------------

class QuestionBank {
var list = [Question]()

init() {
list.append(Question(text: "", correctAnswer: false))
}

init(list: [Question]) {
self.list = list
}

func pop() -> Question? {
guard list.count > 0 else {
return nil
}
return list.removeFirst()
}
}



//Controller: File - ViewController -------------------------------

var remainingQuestions = QuestionBank()
var allQuestions = QuestionBank()

//Iteration snippet: ------------------------------------------

func answerPressed() {
nextQuestion()
}

func nextQuestion() {
guard let nextQuestion = remainingQuestions.pop() else {
print("no questions left")
startOver()
return
}
questionLabel.text = nextQuestion.questionText
}

func startOver() {//also call on first setup
remainingQuestions = QuestionBank(list: allQuestions.list.shuffled())

nextQuestion()
}

关于arrays - 将更改后的数组重置为其原始值 Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57712308/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com