Chinaunix首页 | 论坛 | 博客
  • 博客访问: 978330
  • 博文数量: 184
  • 博客积分: 10030
  • 博客等级: 上将
  • 技术积分: 1532
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-27 18:32
文章分类

全部博文(184)

文章存档

2009年(1)

2008年(63)

2007年(39)

2006年(79)

2005年(2)

我的朋友

分类:

2006-12-25 15:20:18

除了对数组进行修改的函数外,还有些内建函数可采用列表作为自己的参数,并返回新列表。
第一个列表函数是reverse函数。 它要求取得一个列表作为自己的参数,返回的也是一个列表,并翻转其中的内容。
另外一个可对列表进行修改的是sort函数。若向其传递一个列表,它会返回列表的一个拷贝,并按字典顺序(ASCII顺序)对其中的内容进行排序。 另外,程序员也可以指定一个不同的排列顺序-不以单独的字符为基础。具体的说,我们必须为sort函数提供一些代码,以便对列表中的元素进行对比,以决定它们最终的排列顺序。具体的说,我们在代码里必须对比$a和$b这2个元素,假如$a小于$b,便返回1;假如$a和$b相等,便返回0;假如$a小于$b,则返回 -1。
为sort指定排列顺序时,对于要比较的两个值来说,它们的变量名必须设成$a和$b。否则sort函数便无法正确对列表中的值进行排序,而且不会因此而报告任何错误。 并在Perl程序中,应该尽量避免使用$a和$b这两个变量名。从上面看出,这两个变量在sort函数里具有非常特殊的含义,应该属于“保留变量”。
打算更改排列顺序时,最有用的运算符是cmp和<=>。其中,cmp会按字典顺序对比两个运算对象的大小(这是sort函数的默认行为)。相反,<=>会按数字顺序来对比两个运算符对象的大小,这两个运算符返回值都是1,0,-1。
下面这个程序演示了sort和reverse函数的运用。
#!/usr/bin/perl
# Fig. 4.12: fig04_12.pl
# Reversing the elements of an array and
# sorting arrays lexically and numerically.
# create @array with values from 1-10 and reverse the values
@array = ( 0 .. 9 );
@reversed = reverse( @array );
print "Original:    @array\n";
print "Reversed:    @reversed\n\n";
# create an unsorted array of numbers and sort it
@array2 = ( 100, 23, 9, 75, 5, 10, 2, 50, 7, 96, 1, 40 );
@sortedLexically = sort @array2;
@sortedNumerically = sort { $a <=> $b } @array2;
print "Unsorted:    @array2\n";
print "Lexically:   @sortedLexically\n";
print "Numerically: @sortedNumerically\n";
程序输出如下:
Original:    0 1 2 3 4 5 6 7 8 9
Reversed:    9 8 7 6 5 4 3 2 1 0
Unsorted:    100 23 9 75 5 10 2 50 7 96 1 40
Lexically:   1 10 100 2 23 40 5 50 7 75 9 96
Numerically: 1 2 5 7 9 10 23 40 50 75 96 100
 
阅读(2129) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~