Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如果存在';在字符串集中有几个可识别的数字序列吗?_Algorithm_Language Agnostic_Sorting_Natural Sort - Fatal编程技术网

Algorithm 如果存在';在字符串集中有几个可识别的数字序列吗?

Algorithm 如果存在';在字符串集中有几个可识别的数字序列吗?,algorithm,language-agnostic,sorting,natural-sort,Algorithm,Language Agnostic,Sorting,Natural Sort,所谓的是为了解决以下问题:当用户期望 file1.txt file2.txt file3.txt file10.txt file11.txt “常规”排序将生成: file1.txt file10.txt file11.txt file2.txt file3.txt 这既不方便又不“自然” 现在我们最近遇到了一个情况,用户抱怨同样的问题,我们考虑采用自然排序。然而,出现了以下问题。考虑下面的字符串集合: file1file100.txt file2file99.txt ... file99f

所谓的是为了解决以下问题:当用户期望

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
其中有多个可识别的数字序列,并且这些序列彼此相反。自然排序应该如何处理这些集合(我的意思是结果应该是什么,而不是如何实现)?

我怀疑是否有“正确”的答案

就我个人而言,“自然”的做法是按第一个嵌入的数字排序,用第二个数字打破联系,等等

然而,因为这是你的用户的期望,而不是我的期望,所以可能值得问他们。

我怀疑是否有“正确”的答案

就我个人而言,“自然”的做法是按第一个嵌入的数字排序,用第二个数字打破联系,等等


然而,因为这是你的用户的期望,而不是我的期望,所以可能值得向他们询问。

先到者当然会获胜

通常的排序是按字母顺序对文件名进行排序(可能需要对文件扩展名进行特殊处理,尽管这可能只是通过对字符中的第一个进行排序来实现):
'f',i',l',e',1',f',i',l',e',1',0',0'

自然排序按字母顺序对文件名进行排序,其中每个字母是字符或数字:
'f','i','l','e',1','f','i','l','e',100
。字符之间的比较是正常的字符顺序,数字之间的比较是正常的整数顺序,字符和数字之间的比较将数字放在任何字符之前(除了
)。最后,您需要打破
file1
file01
之间的联系,因此“数字”不仅仅是数字,它们确实需要“知道”它们的原始表示形式,以防走得太远

实际上我建议不要问用户。如果他们真的有一个强烈的意见,他们希望他们的文件如何排序,然后确定,足够公平。否则,他们可能实际上不知道他们“应该”期望的是什么,因此对于分析师/程序员来说,找出什么是“正常”比用户这样做更有意义。当然,你可以通过可用性测试间接地“询问”他们,如果这是一件值得的大事。我发现,如果你向用户提出错误的问题,他们会感到猜测答案的压力,而且没有必要因为用户代表当时的想法而随意编写代码


无论用户认为这些规则应该是什么,他们真正能做到最好的可能是他们的操作系统在默认情况下在文件管理器、文件对话框中列出文件时所做的任何事情。因此,我会向他们提供这一点(或者可能是最接近的,我可以编写代码,而不会在次要的边缘案例上浪费他们很多钱),如果他们仍然不高兴,那就找出原因。

首先出现的人肯定会赢

通常的排序是按字母顺序对文件名进行排序(可能需要对文件扩展名进行特殊处理,尽管这可能只是通过对字符中的第一个进行排序来实现):
'f',i',l',e',1',f',i',l',e',1',0',0'

自然排序按字母顺序对文件名进行排序,其中每个字母是字符或数字:
'f','i','l','e',1','f','i','l','e',100
。字符之间的比较是正常的字符顺序,数字之间的比较是正常的整数顺序,字符和数字之间的比较将数字放在任何字符之前(除了
)。最后,您需要打破
file1
file01
之间的联系,因此“数字”不仅仅是数字,它们确实需要“知道”它们的原始表示形式,以防走得太远

实际上我建议不要问用户。如果他们真的有一个强烈的意见,他们希望他们的文件如何排序,然后确定,足够公平。否则,他们可能实际上不知道他们“应该”期望的是什么,因此对于分析师/程序员来说,找出什么是“正常”比用户这样做更有意义。当然,你可以通过可用性测试间接地“询问”他们,如果这是一件值得的大事。我发现,如果你向用户提出错误的问题,他们会感到猜测答案的压力,而且没有必要因为用户代表当时的想法而随意编写代码


无论用户认为这些规则应该是什么,他们真正能做到最好的可能是他们的操作系统在默认情况下在文件管理器、文件对话框中列出文件时所做的任何事情。因此,我会向他们提供这一点(或者可能是最接近的,我可以编写代码,而不会在次要的边缘案例上浪费他们的钱),如果他们仍然不高兴,请找出原因。

我希望严格按照从左到右的顺序排列数字,就像它们前面有足够的前缀0一样。我会通过强调规则的简单性/通用性来反驳/说服那些不这么认为的用户。

我希望数字的排序是严格的从左到右的顺序,就像它们前面有足够的前缀0一样。我会通过强调规则的简单性/通用性来反驳/说服那些持相反观点的用户。

通过您的示例,我认为将这些文件名视为一系列以下内容是很自然的:

<non numeric chars> <numeric chars> <non numeric chars2> <numeric chars2> "." <extension of chars>
将每个文件拆分为这6个部分,并对所有字段上的文件进行排序,最左边的字段为mo