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