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