Swift 4.2:如何从问题数组中选取多个随机元素?
在Swift 4.2中选取若干随机不重复元素的方法
嘿,这个需求太常见了!在Swift 4.2及后续版本里,苹果给集合类型加了专门的随机化API,能轻松搞定你的问题——不管是从5个问题里选3个,还是从100个里挑10个,都简单得很。
最适合测验应用的方案:打乱数组后取前N个(不重复)
测验肯定不能重复展示同一道题,所以这种方法是首选:
- 用
shuffled()把原数组随机打乱顺序 - 用
prefix(_:)选取前N个元素,就能得到N个不重复的随机问题
代码示例:
let questionList = ["Question1","Question2","Question3","Question4","Question5", /* ... 更多问题 */] let numberOfQuestionsToPick = 10 // 你想要选取的数量 // 处理数组元素不足的情况(比如数组只有8个问题,最多只能选8个) let safePickCount = min(numberOfQuestionsToPick, questionList.count) // 获取随机不重复的问题(转成数组方便后续使用) let selectedQuestions = Array(questionList.shuffled().prefix(safePickCount)) // 打印结果 print(selectedQuestions)
这个方法的优势很明显:shuffled()是系统优化过的API,哪怕是上千个元素的数组也能快速处理,而且代码简洁易懂,可读性拉满,完全适配你的测验场景。
可选方案:允许重复的随机选取(一般测验用不上)
如果你的场景允许重复展示同一道题,可以直接循环调用randomElement():
var selectedQuestions: [String] = [] let pickCount = 10 for _ in 0..<pickCount { if let randomQuestion = questionList.randomElement() { selectedQuestions.append(randomQuestion) } }
不过这种方法会有概率出现重复问题,所以只适合不限制重复的特殊场景。
内容的提问来源于stack exchange,提问作者Russ
相关产品推荐
相关产品推荐

