gpt4 book ai didi

swift - 如何随机排列问题并显示数组中的一项

转载 作者:行者123 更新时间:2023-11-28 06:09:09 26 4
gpt4 key购买 nike

我正在进行一个测验项目,但目前我发现很难随机排列问题并从数组中挑选单个项目。请在下面找到我的代码。

我选择 Controller 的类别是:

struct Quiz {
private(set) var name = String()
private(set) var plist: NSArray



init(name: String) {
self.name = name
plist = NSArray(contentsOfFile: Bundle.main.path(forResource: name, ofType: "plist")!)!

}

static let quizzes = [Quiz(name: "Development"), Quiz(name: "Reflexes")]}

我的测验 Controller 是

override func viewDidLoad() {    
super.viewDidLoad()


set = shuffledQuiz([[Quiz.quizzes[currentTopicIndex].plist]])

quiz = set.objectEnumerator()


pickQuestion()
}

func shuffledQuiz(_ name: [[NSArray]]) -> NSArray{
if currentSetIndex < name.count {
return name[currentSetIndex].shuffled() as NSArray
}
return NSArray()}

func pickQuestion() {

if let quiz = quiz?.nextObject() as? NSArray {
print(quiz)

let questionLabel: [String] = quiz.value(forKeyPath: "question") as! NSArray as! [String]

print(questionLabel)
self.questionLabel.text = questionLabel.description

let correctAnswer: [Int] = quiz.value(forKey: "Answer") as! NSArray as! [Int]
print(correctAnswer)
let answers = quiz.value(forKeyPath: "options") as! NSArray

print(answers)


for i in 0..<answersButtons.count {
answersButtons[i].setTitle((answers[i] as AnyObject).localizedName, for: .normal)
}
remainingQuestionsLabel.text = "\(set.index(of: quiz) + 1)/\(set.count)"
}
else {
endOfQuestionsAlert()
}
}

我的plist如下

Plist image is here

我将不胜感激任何帮助。谢谢。

最佳答案

使用 Fisher-Yates洗牌。

基本算法是:

  1. 从未打乱的数组和打乱后的空数组开始。
  2. 从未打乱的数组中随机选取一个元素
  3. 将其从未打乱的数组中移除,并将其添加到打乱后的数组的末尾。
  4. 重复步骤 2 和 3,直到未打乱的数组为空。
  5. 返回打乱后的数组。

您可以使用以下算法“就地”打乱数组

  1. 将变量 n 设置为数组中元素的数量。
  2. 选择一个随机数 x0 ..< n (使用 arc4random_uniform() )
  3. 交换元素x与元素 n - 1
  4. 减去1来自 n
  5. 重复步骤 2 到 4 直到 n为零。

关于swift - 如何随机排列问题并显示数组中的一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47221018/

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