開發類似駕考寶典的習題App,核心技術點在於:
-- 隨機抽取10道題
SELECT * FROM questions ORDER BY RANDOM() LIMIT 10;
-- 選項亂序:應用層處理更靈活
-- 取出選項陣列後用 Fisher-Yates 洗牌演算法
// 1. 先查總數
int total = db.rawQuery("SELECT COUNT(*) FROM questions", null).getInt(0);
// 2. 生成不重複隨機索引集合
Random random = new Random();
Set indices = new HashSet<>();
while (indices.size() < 10) {
indices.add(random.nextInt(total));
}
// 3. 批量查詢(需配合 OFFSET 或主鍵範圍)
// 建議:主鍵連續時用 WHERE id IN (...) 更高效
fun shuffleOptions(options: MutableList): List {
val shuffled = options.toMutableList()
for (i in shuffled.size - 1 downTo 1) {
val j = Random.nextInt(i + 1)
shuffled[i] = shuffled[j].also { shuffled[j] = shuffled[i] }
}
return shuffled
}
subject_id, difficulty複合索引加速篩選last_used時間戳,實現「間隔重複」演算法參考資源:CSDN相關實現文章