如何在MiniZinc输出中将整数主题编号替换为对应名称?
解决方案
不需要定义可变字符串数组,直接用固定的主题名称映射数组就能实现需求,步骤如下:
- 先定义一个与主题整数一一对应的名称数组,索引直接对应主题的整数值:
% 假设你的TOPICS集合是1..11,按顺序定义每个整数对应的主题名称 array[TOPICS] of string: topic_names = [ "History", % 对应主题1 "Math", % 对应主题2 "Physics", % 对应主题3 "Chemistry", % 对应主题4 "Biology", % 对应主题5 "Geography", % 对应主题6 "Literature",% 对应主题7 "Art", % 对应主题8 "Music", % 对应主题9 "PE", % 对应主题10 "Computer" % 对应主题11 ];
- 修改原有的输出代码,把选中的主题整数替换为对应的名称,再拼接成需要的格式:
output([ join([ name[ss, 1] ++ " " ++ % 生成带方括号的主题名称列表,用逗号分隔 "[" ++ join([topic_names[tt] | tt in TOPICS where topicSelected[ss, tt]], ", ") ++ "]\n" | ss in STUDENTS ]) ]);
说明
- 这种方式不需要提前为每个学生存储课程名称数组,直接在输出时通过索引映射动态生成字符串列表,符合MiniZinc的表达式风格。
- 如果你的
TOPICS集合不是从1开始(比如0..10),只需调整topic_names数组的索引对应关系即可,确保每个主题整数能正确匹配到对应的名称。
内容的提问来源于stack exchange,提问作者Desiderius Severus
相关产品推荐
相关产品推荐

