如果字符串集中有多个数字序列可识别,自然排序应如何工作?

| 所谓的自然排序是为了解决以下问题:当用户期望时
file1.txt
file2.txt
file3.txt
file10.txt
file11.txt
\“通常\”排序会产生:
file1.txt
file10.txt
file11.txt
file2.txt
file3.txt
这很不方便,也不是“自然的”。 现在,我们最近遇到了这样一种情况:用户抱怨同样的问题,因此我们考虑采用自然排序。但是,出现以下问题。考虑以下字符串集:
file1file100.txt
file2file99.txt
...
file99file2.txt
file100file1.txt
其中有多个可识别的数字序列,并且这些序列彼此相反。自然排序应如何处理此类集合(我的意思是结果应该是什么,而不是如何实现)?
已邀请:
当然,首先出现的是胜利。 通常的排序按字典顺序对文件名按字符序列进行排序(嗯,也许对文件扩展名进行了特殊处理,尽管可以仅通过在字符中先排列“ 3”来实现):“ 4”。 自然排序按字典顺序对文件名按标记序列进行排序,其中每个标记可以是字符或数字:
\'f\', \'i\', \'l\', \'e\', 1, \'f\', \'i\', \'l\', \'e\', 100
。字符之间的比较是正常的字符顺序,数字之间的比较是正常的整数顺序,字符和数字之间的比较将数字放在任何字符之前(
.
除外)。最终,您需要打破
file1
file01
之间的纽带,因此\“数字\”不仅仅是数字,它们确实需要“知道”其原始表示,以防它到达那么远。 实际上,我建议您不要询问用户。如果他们有非常强烈的意见,希望对文件进行排序,那么还可以,很公平。否则,他们可能实际上并不确切知道他们应该“期望”什么,因此对于分析师/程序员来说,弄清楚什么是“正常”情况比让用户这样做更有意义。当然,如果这笔交易足够值得,可以通过可用性测试间接“询问”它们。我发现,如果您向用户提出错误的问题,他们会感到猜测答案的压力很大,并且仅仅因为用户代表即刻想到的内容而对任意内容进行编码是没有意义的。 无论用户认为规则应该是什么,机会都是他们最好地实际使用的,这是操作系统在文件管理器,文件对话框等中列出文件时默认情况下所做的事情。因此,我愿意为他们提供(或者可能是最接近我的代码,而不会在次要情况下浪费很多钱),如果他们仍然不满意,请找出原因。
我怀疑是否有一个“正确”的答案。 就我个人而言,要做的“自然”是按第一个嵌入数字排序,使用第二个等打破联系。 但是,由于这是用户的期望,而不是挖掘该问题,因此可能值得询问他们。
我希望数字严格按照从左到右的顺序排序,就好像它们以足够的0前缀作为前缀。我会通过强调规则的简单性/通用性来反对/说服其他想法的用户。
通过您的示例,我认为将这些文件名视为以下序列很自然:
<non numeric chars> <numeric chars> <non numeric chars2> <numeric chars2> \".\" <extension of chars>
将每个文件划分为6个部分,并对所有字段中的文件进行排序,最左边的字段最重要。 注意:与Steve Jessops的好答案不同,排序时应该整体考虑非数字或数字字符的序列。 看起来最自然的结果应该是您所显示的-最左边的数字字段给出整体顺序-毕竟,我们习惯于数字中最左边的数字是最高有效的;软件版本中最左边的数字是最重要的。

要回复问题请先登录注册