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

基于选项路径表格构建多级选择题数据结构的实现思路咨询

如何将层级选择题表格转换为嵌套数据结构?

我来帮你理清楚这个思路,其实核心是先拆解表格的层级依赖,再用更稳妥的方式构建对象关联,避免递归踩坑:

第一步:先拆解表格的层级依赖关系

首先别盯着表格的行看,要盯着列与列的依赖逻辑:

  • 表格的每一列对应一个层级的问题:Question 1(顶层)→ Question 2(中间层)→ Question 3(底层)
  • 每个上层选项,对应下层问题的一个专属选项子集:比如选Question 1的Option A,就会触发包含AA/AB/AC/AD/AE的Question 2;选Option B则触发包含BA/...的Question 2
  • 底层的Question 3选项没有后续问题,所以它们的nextQuestion都是null

第二步:从最底层反向构建(避免递归关联问题)

你之前用递归出问题,大概率是正向构建时,子问题还没创建好,父选项没法关联。反过来从最底层开始构建,逻辑会清晰很多:

  1. 先处理底层的Question 3:
    • 把表格里所有Question 3的选项(AAA/ABA/ACA/...)都创建成Answer实例,每个的nextQuestion设为null
    • 用一个映射表(比如Map<String, MultipleChoiceQuestion>)缓存每个Question 3的实例:比如“Question 3 - AAA”对应一个只有AAA选项的Question 3实例
  2. 再处理中间层的Question 2:
    • 遍历表格里的Question 2选项,每个选项对应一个Question 3实例(比如AA对应AAA的Question 3),把这个关联设置到AA的nextQuestion上
    • 把同一上层选项(比如Option A)下的所有Question 2选项(AA/AB/AC/AD/AE)收集起来,组成一个专属的Question 2实例,然后缓存这个实例
    • 注意:同一上层选项对应的Question 2是同一个实例,不要重复创建
  3. 最后处理顶层的Question 1:
    • 把每个顶层选项(A/B/...)对应的Question 2实例关联到该选项的nextQuestion上,然后把这些选项组成Question 1的options列表

第三步:验证现有数据结构的适配性

你定义的MultipleChoiceQuestion和Answer完全适配这个场景:

  • MultipleChoiceQuestion完美承载每个层级的问题(标题+可选答案)
  • Answer的nextQuestion正好对应“选此选项后跳转的下一个问题”的逻辑

唯一需要注意的是:不要重复创建相同的问题实例——比如所有属于Option A下的Question 2选项,都属于同一个Question 2实例,而不是每个选项对应一个新的Question 2。

第四步:处理顶层的重复选项

表格里第一列大量重复的Option A/Option B是冗余展示,实际转换时只需要保留每个唯一的顶层选项一次:

  • 把所有属于Option A的Question 2选项集合起来,组成一个Question 2实例
  • 给Option A这个Answer实例的nextQuestion指向这个Question 2实例即可,不需要重复创建Option A的实例

实用小技巧:用映射表缓存对象

构建过程中用哈希表缓存已创建的Question和Answer实例,既能避免重复创建,又能快速查找关联对象:

  • 比如用Map<String, MultipleChoiceQuestion> questionCache,键可以是“Question 2 - Option A组”这类标识,值是对应的问题实例
  • 用Map<String, Answer> answerCache缓存每个选项的实例,确保相同标题的选项是同一个对象

内容的提问来源于stack exchange,提问作者TickL Me Tibbers

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 13:18:15