Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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
Arrays 大小写字符串的排序_Arrays_String_Perl - Fatal编程技术网

Arrays 大小写字符串的排序

Arrays 大小写字符串的排序,arrays,string,perl,Arrays,String,Perl,我试图在perl中按字母顺序对大小写字符串进行排序。但是,由于某种原因,perl首先对大写字符串进行排序,然后对小写字符串进行排序(参见下面的示例) 输出: PQR STW abc def 您可以通过转换为小写或大写来设置排序条件 @array = sort { lc($a) cmp lc($b) } @array; 您可以通过转换为小写或大写来设置排序条件 @array = sort { lc($a) cmp lc($b) } @array; 您需要不区分大小写的排序,通过显式指

我试图在perl中按字母顺序对大小写字符串进行排序。但是,由于某种原因,perl首先对大写字符串进行排序,然后对小写字符串进行排序(参见下面的示例)

输出:

PQR 
STW 
abc 
def 

您可以通过转换为小写或大写来设置排序条件

@array = sort { lc($a) cmp lc($b) } @array;

您可以通过转换为小写或大写来设置排序条件

@array = sort { lc($a) cmp lc($b) } @array;

您需要不区分大小写的排序,通过显式指定排序标准来完成

my @sorted = sort { "\L$a" cmp "\L$b" } @array;
或者更好

use feature qw(fc);
my @sorted = sort { fc($a) cmp fc($b) } @array;

这是专门为此设计的。另请参见中的示例下。

您需要不区分大小写的排序,通过显式指定排序标准来完成

my @sorted = sort { "\L$a" cmp "\L$b" } @array;
或者更好

use feature qw(fc);
my @sorted = sort { fc($a) cmp fc($b) } @array;

这是专门为此设计的。另请参见示例中的。

fc比小写字符串的比较快。原因可能是避免了字符串转换。@scs并不奇怪。(您是否对其进行了基准测试?)它是用于实现这些转义的内部方法。它可能优化了很多,而且实际上可能不会复制数据。这是正确的方法。注意,如果有
使用v5.16,则不必加载
功能
或更高版本。使用v5.17或更高版本。v5.16崩溃。我做了一个快速(惰性)基准测试,在循环中交替使用正常排序和不同的答案排序算法。fc是最快的算法。更好的基准测试需要创建一个大数组并在其上运行排序算法。@scs Nice,感谢提供信息。撞车。。。我这里有v5.16.3,很好。如图所示,错误是“在../sorttest.pl第33行调用了未定义的子程序&main::fc”。为了重现错误,必须首先删除USEV.5.16,运行perl,然后再次添加它。然后,如果use v5.16被use v5.17替换,它将崩溃并停止崩溃。我有PerlV5.18。fc比比较小写字符串快。原因可能是避免了字符串转换。@scs并不奇怪。(您是否对其进行了基准测试?)它是用于实现这些转义的内部方法。它可能优化了很多,而且实际上可能不会复制数据。这是正确的方法。注意,如果有
使用v5.16,则不必加载
功能
或更高版本。使用v5.17或更高版本。v5.16崩溃。我做了一个快速(惰性)基准测试,在循环中交替使用正常排序和不同的答案排序算法。fc是最快的算法。更好的基准测试需要创建一个大数组并在其上运行排序算法。@scs Nice,感谢提供信息。撞车。。。我这里有v5.16.3,很好。如图所示,错误是“在../sorttest.pl第33行调用了未定义的子程序&main::fc”。为了重现错误,必须首先删除USEV.5.16,运行perl,然后再次添加它。然后,如果use v5.16被use v5.17替换,它将崩溃并停止崩溃。我有perl v5.18。在比较不同的字符集时要小心
lc
,因为有些国际变体会做一些稍微奇怪的事情。在比较不同的字符集时要小心
lc
,因为有些国际变体会做一些稍微奇怪的事情。