【问题标题】:Choose random structs out of array从数组中选择随机结构
【发布时间】:2023-03-28 01:34:01
【问题描述】:

在用户开始测验之前,我有一个随机排列的结构数组。我想从这个数组中随机取出 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")
                                                                        ]

【问题讨论】:

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

标签: ios arrays swift random


【解决方案1】:

只需混合数组并选择前三个元素。

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]

【讨论】:

    【解决方案2】:

    您可以使用此函数从数组中提取 X 个随机元素

    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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-16
      • 1970-01-01
      • 2011-03-29
      • 2011-05-26
      • 2018-11-11
      相关资源
      最近更新 更多