perl排序_使用Perl排序数据-第一部分

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排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值