perl排序
介绍排序功能的讨论针对初学者进行perl编码。 经验丰富的Perl编码人员不会发现任何新的或有用的东西。 对列表或数组进行排序是程序非常普遍的要求。 如果您不知道列表和数组之间的区别,请不必担心。 列表只是一个没有名称的数组。 它们都可以保存相同类型的数据:标量或字符串。 我将使用术语“列表”和“数组”来表示同一件事。
sort()函数sort()函数对原始列表的副本进行排序,并返回一个新列表。 这意味着您不能像在其他perls其他内置函数中那样在空上下文中使用sort()函数:
sort(@array); # bad - void context
您必须使用赋值运算符“ =”将结果分配给数组:
@sorted = sort(@arrray);
但是您可以使用与原始数组相同的名称对原始数组进行排序:
@array = sort(@arrray);
请记住,当执行此操作时,@ array的原始未排序值将消失。
Perl的内置排序功能通常在实际数据中用处不大。 默认排序是通过标准字符串比较。 对于未启动的perl编码器,这可能会非常混乱。 让我们来看一个例子。
@array = qw(@foo 1 32 11 4 2 44 22 !bar Mary mary Adam ant xxx XXX);
@sorted = sort (@array);
print "$_\n" for @sorted;
排序后的输出为:
!bar
1
11
2
22
32
4
44
@foo
Adam
Mary
XXX
ant
mary
xxx
输出以升序ASCII值排序,对于大多数实际应用而言不是很有用。
但是,如果您要对标准化数据进行排序(例如所有小写字母字符串),则默认排序将起作用,而您无需执行任何其他操作。
要以降序对数据进行排序,请在sort函数之前添加反向函数:
@sorted = reverse sort (@array);
另一种方法是使用代码块和perls“ cmp”字符串比较运算符:
@sorted = sort {$b cmp $a} @array; # descending order same as reverse sort above
@sorted = sort {$a cmp $b} @array; # ascending order same as the default sort
在上面的示例中,我没有任意决定使用$ a和$ b。
$ a和$ b是perl用于对数据进行排序的特殊标量变量。
您应该避免在perl程序中将它们用于其他任何用途,并且在使用“严格”编译指示时不应将它们声明为“ my”。
第二部分将讨论使用perl对数据进行排序的更高级的方法。
本文受《
创用CC许可 。翻译自: https://bytes.com/topic/perl/insights/751872-sorting-data-perl-part-one
perl排序