作者LiloHuang (四年前两年後)
看板perl
标题Re: [问题] 关於排序
时间Fri Jul 20 10:27:01 2007
我讲重点就好
@data = map { substr $_ ,3 }
sort
map { [split " "]->[1].$_ } @data;
其实写法等同於
@data = map { [split " "]->[1].$_ } @data;
@data = sort @data;
@data = map { substr $_ , 3 } @data;
当执行第一列程式码时 我故意把NO* 这个栏位摆到前面来
split " " 是切割原本每一个列的字串 ( Row跟Column常常会被误用 )
"A NO1 2006/10/10 18:36" 变成一个匿名阵列
["A","NO1","2006/10/10 18:36"] 然後取出阵列1的资料NO*
尾巴还得加上原始的资料,其实有其他作法,例如加上原始的阵列位置
不摆原始资料,我说过,写法可以有很多种^^ 这边我只举这个范例
其目的是在於经过排序过程,原始资料会跟着一起动,不管是GRT或者
Schwartzian转换的精神是在於这边(Schwartzian转换通常以匿名阵列加在前面)
经过map资料会变成
NO1A NO1 2006/10/10 18:36
NO2B NO2 2007/12/12 16:37
NO3C NO3 2007/12/13 17:40
NO1D NO1 2005/01/01 00:01
NO2G NO2 2007/12/13 17:20
特别注意一点,这边的NO*栏位长度都是固定的,如果不固定要自己padding
例如使用pack来padding
当执行第二列程式码时,资料会进行排序
NO1A NO1 2006/10/10 18:36
NO1D NO1 2005/01/01 00:01
NO2B NO2 2007/12/12 16:37
NO2G NO2 2007/12/13 17:20
NO3C NO3 2007/12/13 17:40
当执行第三列程式码时,目的就是把前面的NO*给删除,因此使用substr
A NO1 2006/10/10 18:36
D NO1 2005/01/01 00:01
B NO2 2007/12/12 16:37
G NO2 2007/12/13 17:20
C NO3 2007/12/13 17:40
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.114.71.35
※ 编辑: LiloHuang 来自: 140.114.71.35 (07/20 10:29)
1F:推 handsomegirl:前面栏位不固定的问题,split可以从後面切回来吗? 07/20 10:42
2F:推 LiloHuang:你直接给个范例给我看,我不懂你为何要从後面切回来 07/20 10:45
3F:推 twico:L大好威~ 07/20 10:48