文件名里含编号时,逐字符比较会把某些较长数字排到较短数字前面。若希望按关卡编号排列,就需要明确提取哪一段数字,同时决定前导零相同编号的处理方式。
下面把一个游戏界面或模拟规则拆成可复查的记录。每组输入独立给出,先确认单位、先后次序和边界,再核对结果。它不依赖具体游戏的隐藏参数,读者可以直接挑选几步手工复算。
十二个文件名均为level加十进制数字再加相同后缀。比较两种显示:逐字符顺序,以及把中间数字转成整数的顺序。数字相同或文件名完全相同时,按原记录编号保持先后,不合并任何记录。
按原编号零到十一的文件名['level115.sav', 'level007.sav', 'level77.sav', 'level33.sav', 'level65.sav', 'level60.sav', 'level70.sav', 'level29.sav', 'level1.sav', 'level2.sav', 'level10.sav', 'level115.sav']
记录0名称level115.sav,提取数字115,逐字符方式排第4行,数字方式排第11行。前导零保留在显示名称中,数值相同的记录依原编号排列。
记录1名称level007.sav,提取数字7,逐字符方式排第1行,数字方式排第3行。前导零保留在显示名称中,数值相同的记录依原编号排列。
记录2名称level77.sav,提取数字77,逐字符方式排第12行,数字方式排第10行。前导零保留在显示名称中,数值相同的记录依原编号排列。
记录3名称level33.sav,提取数字33,逐字符方式排第8行,数字方式排第6行。前导零保留在显示名称中,数值相同的记录依原编号排列。
记录4名称level65.sav,提取数字65,逐字符方式排第10行,数字方式排第8行。前导零保留在显示名称中,数值相同的记录依原编号排列。
记录5名称level60.sav,提取数字60,逐字符方式排第9行,数字方式排第7行。前导零保留在显示名称中,数值相同的记录依原编号排列。
记录6名称level70.sav,提取数字70,逐字符方式排第11行,数字方式排第9行。前导零保留在显示名称中,数值相同的记录依原编号排列。
记录7名称level29.sav,提取数字29,逐字符方式排第7行,数字方式排第5行。前导零保留在显示名称中,数值相同的记录依原编号排列。
记录8名称level1.sav,提取数字1,逐字符方式排第2行,数字方式排第1行。前导零保留在显示名称中,数值相同的记录依原编号排列。
记录9名称level2.sav,提取数字2,逐字符方式排第6行,数字方式排第2行。前导零保留在显示名称中,数值相同的记录依原编号排列。
记录10名称level10.sav,提取数字10,逐字符方式排第3行,数字方式排第4行。前导零保留在显示名称中,数值相同的记录依原编号排列。
记录11名称level115.sav,提取数字115,逐字符方式排第5行,数字方式排第12行。前导零保留在显示名称中,数值相同的记录依原编号排列。
字符顺序编号[1, 8, 10, 0, 11, 9, 7, 3, 5, 4, 6, 2],数字顺序编号[8, 9, 1, 10, 7, 3, 5, 4, 6, 2, 0, 11];记录身份不变,任何相同名称也不自动合并。
不依靠排序过程,可以逐项数出比自己优先的记录,再加一得到行号。文字方式按完整字符串比较;数字方式只比较数值,相等时看原编号。把行号映射回记录应与输出列表一致。
本例的文件名格式固定,不能把它直接套到包含多个数字段、日期或版本号的名字。数字相同不代表文件内容相同,前导零在显示中仍保留;排序只改变显示次序,不重命名或覆盖文件。
练习时可以只改动一项输入,预测从哪一步开始出现变化,再逐步比较。空状态、数值零和无法判断要分别记录;不要为了让最后结果一致而忽略中途的偏差。边界与同分约定同样属于规则,复核时应一并保留。