2015-08-03 132 views
0

我有一个结构数组,我在用户开始测验之前随机化。我想从这个数组中随机取出3个问题,并将它们放入一个新数组中。我能做到这一点的最佳方式是什么?从数组中选择随机结构

我应该在选择随机结构之前洗牌,还是有办法选择随机结构?

到目前为止,我可以解决如何做到这一点的唯一方法是预先洗牌数组,然后附加前3个响应。

var learnersQuizQuestions = 

[ 
    questionInfo(question: "Question 0", questionNumber: 1, answer: true, explanation: "Explanation for Question 0"), 
    questionInfo(question: "Question 1", questionNumber: 2, answer: true, explanation: "Explanation for Question 1"), 
    questionInfo(question: "Question 2", questionNumber: 3, answer: true, explanation: "Explanation for Question 2"), 
    questionInfo(question: "Question 3", questionNumber: 4, answer: true, explanation: "Explanation for Question 3"), 
    questionInfo(question: "Question 4", questionNumber: 5, answer: true, explanation: "Explanation for Question 4") 
                     ] 
+0

从数组中选择一个随机元素,然后将其删除。选择另一个,删除。选择第三个,也删除那个。 –

回答

0

您可以使用此功能从阵列

func randFromArray<T>(arr: Array<T>,numOfElements:Int)->Array<T>{ 
    var localArr = arr; 
    let minIndex = minElement([numOfElements,arr.count]) 
    var result = Array<T>(); 

    for i in 0..<minIndex{ 
     var randIndex = Int(arc4random()) % localArr.count; 
     let element = localArr[randIndex]; 
     localArr.removeAtIndex(randIndex) 
     result.append(element) 
    } 

    return result; 
} 
1

提取X随机因素只是混合阵列,并挑选前三个元素。

for var i:Int = 0; i < 10; ++i{ 
    randIdx1 = Int(arc4random() % learnersQuizQuestions.count) 
    randIdx2 = Int(arc4random() % learnersQuizQuestions.count) 
    swap(&learnersQuizQuestions[randIdx1], &learnersQuizQuestions[randIdx1]) 
} 

let firstQuestion = learnersQuizQuestions[0] 
let secondQuestion = learnersQuizQuestions[1] 
let thirdQuestion = learnersQuizQuestions[2]