sha*_*oth 1 language-agnostic sorting algorithm natural-sort
所谓的自然排序旨在解决以下问题:用户期望
file1.txt
file2.txt
file3.txt
file10.txt
file11.txt
Run Code Online (Sandbox Code Playgroud)
"通常"排序反而产生:
file1.txt
file10.txt
file11.txt
file2.txt
file3.txt
Run Code Online (Sandbox Code Playgroud)
这是不方便的,不是"自然的".
现在我们最近遇到了一个用户抱怨这个问题并且我们考虑采用自然排序的情况.然而,出现以下问题.考虑以下字符串集:
file1file100.txt
file2file99.txt
...
file99file2.txt
file100file1.txt
Run Code Online (Sandbox Code Playgroud)
其中存在多个可识别的数字序列,并且这些序列彼此相反.自然排序应如何处理这些集合(我的意思是结果应该是什么,而不是如何实现)?
首先获胜的是肯定的.
通常的排序字典顺序排序作为文件名字符序列(当然,或许与文件扩展名的特殊待遇,尽管这可能是通过订购只是实现的.第一字符之间)'f', 'i', 'l', 'e', '1', 'f', 'i', 'l', 'e', '1', '0', '0'.
自然排序按字典顺序将文件名排序为标记序列,其中每个标记是字符或数字:'f', 'i', 'l', 'e', 1, 'f', 'i', 'l', 'e', 100.字符之间的比较是正常的字符顺序,数字之间的比较是正常的整数顺序,字符和数字之间的比较在任何字符之前放置数字(除外.).最后,你需要打破之间的联系file1和file01,因此,"数字"不太只是数字,他们确实需要"知道"的情况下,它们的原始表示它得到那么远.
我实际上建议不要问用户.如果他们有一个非常强烈的意见,他们希望他们的文件排序然后好,公平.否则他们可能实际上并不确切地知道他们"应该"期望什么,因此分析师/程序员更有意义地弄清楚什么是"正常"而不是用户这样做.当然,你可以通过可用性测试间接地"询问"它们,如果这是一个足够值得的话.我发现,如果你问用户错误的问题,他们会感到有压力猜测答案,并且没有必要编写一些任意的东西,因为这是用户代表当场想到的.
无论用户认为规则应该是什么,在文件管理器,文件对话框等文件中列出文件时,默认情况下他们实际上可以获得的最好的是他们的操作系统.因此,我会向他们提供(或者最接近我可以编码而不会在轻微边缘情况下浪费大量资金),如果他们仍然不高兴找到原因.