数组排序的这种写法很有意思

| 暂无评论 | 暂无引用通告

-->

原文参见:http://www.stonehenge.com/merlyn/UnixReview/col06.html

数据:

Fred 210

Barney 195

Betty 200

Wilma 170

Dino 30

第一列是姓名,第二列为分数,我们需要按照分数进行排序;

通常的做法:

#!/usr/bin/perl -w

use strict;

my @data=<>;

my %scores;

foreach (@data){

my ($name,$score)=split;

$scores{$_}=$score;

}

print sort { $scores{$a} <=> $scores{$b}; } @data;

下面这样的排序挺有意思的:

#!/usr/bin/perl

use strict;


my @data=<>;


print map{$_->[0]} sort {$a->[1] <=> $b->[1];} map {my ($name,$score)=split;[$_,$score];} @data;

这样看着有些乱,改成这样:

#!/usr/bin/perl

use strict;


my @data=<>;


print map{$_->[0]}

sort {$a->[1] <=> $b->[1];}

map {my ($name,$score)=split;[$_,$score];} @data;


首先 map {my ($name,$score)=split;[$_,$score];} @data生成一个数组,每个元素都是一个指向一个包含两个元素的数组的引用,将这个数组传递给sort产生排序后的数组,然后将生成的数组传递给map得到最终的结果。

暂无引用通告

发送引用通告网址: http://supersun.info/mt/mt-tb.cgi/691
如果您想引用这篇日记到您的Blog,请复制上面的链接,放置到您发表文章时的相应界面中。

发表评论

最新资源

  • IMG_1437.JPG
  • line.png
  • bar.png
  • perl_calander.jpg

关于此日记

此日记由 supersun 发表于 2007年8月27日 09:50

此Blog上的上一篇日记健身去了

此Blog上的下一篇日记引用文件句柄

首页归档页可以看到最新的日记和所有日记。