You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS测验APP开发:如何打乱NSDictionary并随机选取5个问答?

从NSDictionary中随机选取5个键值对的实现方法

首先,NSDictionary本身是无序集合,没法直接对它做打乱操作,得先把它转换成键值对数组再处理,具体步骤如下:

  • 第一步:用allEntries属性把NSDictionary里的所有键值对提取成数组,每个元素是包含key和value的元组。
  • 第二步:调用数组的shuffled()方法打乱顺序,这个方法会返回新的打乱后数组,不会改动原数据。
  • 第三步:从打乱后的数组里取前5个元素,如果原字典的键值对数量不足5,就直接取全部。

下面是完整的代码实现:

let questions: NSDictionary = [
    "习惯是一种重复足够多次后变得自动化的行为。": true,
    "在对话中主要谈论自己是影响他人的好方法。": false,
    "在《高效能人士的七个习惯》中,影响圈指的是个人能掌控的所有事物。": true,
    "马尔科姆·格拉德威尔在《异类》中提到,练习时长比天赋更重要。": true,
    "拿破仑·希尔的《思考致富》基于这样的理念:只要拥有正确的心态,任何人都能取得成功。": true
]

// 将NSDictionary转换为键值对数组
let allQuestionPairs = questions.allEntries as! [(key: String, value: Bool)]
// 打乱数组顺序
let shuffledPairs = allQuestionPairs.shuffled()
// 选取前5个元素(数量不足则取全部)
let selectedPairs = Array(shuffledPairs.prefix(5))

// 遍历查看选取结果
for pair in selectedPairs {
    print("问题:\(pair.key),答案:\(pair.value)")
}

如果你的项目更偏向Swift原生写法,建议直接用Swift的[String: Bool]类型(而非NSDictionary),代码会更简洁:

let questions: [String: Bool] = [
    "习惯是一种重复足够多次后变得自动化的行为。": true,
    "在对话中主要谈论自己是影响他人的好方法。": false,
    "在《高效能人士的七个习惯》中,影响圈指的是个人能掌控的所有事物。": true,
    "马尔科姆·格拉德威尔在《异类》中提到,练习时长比天赋更重要。": true,
    "拿破仑·希尔的《思考致富》基于这样的理念:只要拥有正确的心态,任何人都能取得成功。": true
]

// 直接转成数组并打乱,再取前5个
let selectedPairs = Array(questions.shuffled().prefix(5))

for (question, answer) in selectedPairs {
    print("问题:\(question),答案:\(answer)")
}

内容的提问来源于stack exchange,提问作者Rue Vitale

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 14:02:15