作者abliou (Art of Life)
看板perl
标题Re: [问题] 关於排序
时间Thu Jul 19 19:12:23 2007
※ 引述《WalkingIce (会走路的冰块)》之铭言:
: 如果拿 NO 来做 hash 的 key
: 那 row B 跟 row G 只会剩下一个吧?!
: 我也遇过类似的问题,那时候第一个想法就是想要像 java 一样
: 全部弄成 object,然後针对 object 的某个值来做比较 [注]
: 只是我不会用 Perl 这样写,而且我也不会 Perl 的OO (泣)
: [注] http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Comparable.html
: 然後,我又继续用土炮的方式 (对不起,我是乡民)
: 当每一行我要排序的资料都放入阵列之後,我把那些资料的顺序调动
: 把我想要拿来比较的栏位放到最前面,接着 sort 一次
: my @unsort;
: foreach $line(@array) {
: # 很丑的正规表示式, 自己再改一下吧 #
: # 我想拿第二个栏位来比较,所以把 $2 放到最前面 #
: my $new = "$2--$1--$3--$4\n" if $line =~m{(.)\s+(.+)\s\s\s(.+)\s(.+)};
: push(@unsort,$new);
: }
: @sort = sort @unsort;
: print @sort;
: 排序前
: A NO1 2006/10/10 18:36
: B NO2 2007/12/12 16:37
: C NO3 2007/12/13 17:40
: D NO1 2005/01/01 00:01
: G NO2 2007/12/13 17:20
: 程式执行结果
: NO1--A--2006/10/10--18:36
: NO1--D--2005/01/01--00:01
: NO2--B--2007/12/12--16:37
: NO2--G--2007/12/13--17:20
: NO3--C--2007/12/13--17:40
: 啊?什麽?资料输出的长相不一样?
: 那...那就同样的技俩再玩一次啊!
其实我的方法很简单耶...@@.....不知道是不是我会错意了....
########程式码################
open f,"<ttt.txt";
while($line=<f>){
$hash{${[split/\t/,$line]}[1]}=$line;
}
close f;
for $key(sort keys %hash){
print $hash{$key} ;
}
##############################
这样做出来就不会破坏原本的资料格式....
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.124.50.103
1F:推 LiloHuang:嗯嗯 这也是一个好方法 不过hash的memory会比较大一些 07/19 21:40