作者abliou (下一个未来)
看板Perl
标题Re: [问题] 取值
时间Mon Apr 14 12:06:48 2014
那可能要先定义一下甚麽叫做一行了
假设阵列格式很简单 到是有办法写出"伪一行"
@data = ('ID2*1,2,3*2,3,4*','ID3**2*','ID4***' ) ;
sub{
(length($_[1])+length($_[2])==0)?
print "$_[0]\n" :
sub{
print "$_[0] $_\n" for
@_[1..$#_]
}->(($_[0]),
(map{'A'.$_}(split',',$_[1])),
(map{'B'.$_}(split',',$_[2])))
}->(/(.+)\*(.*)\*(.*)\*/)
for @data ;
我是觉得 有点难读 如果三个月後哪个倒楣鬼要改会有点麻烦
(套句Larry的话 三个月後的倒楣鬼通常是自己)
※ 引述《AntaresStar ()》之铭言:
: 这样就没办法那麽少行啦...
: my @a = split /\*/;
: my $id = shift @a;
: $a[0] =~ s/(\d+)/A$1/g;
: $a[1] =~ s/(\d+)/B$1/g;
: @a = grep {/\S/} map {split /,/} @a;
: @a ? map {print "$id $_\n"} sort {substr($a,1)<=>substr($b,1)} @a
: : print "$id\n";
: 看有没有人有兴趣弄出更少行的 XD
: ※ 引述《yalent ( 心只有你 )》之铭言:
: : 非常感谢您的回答~
: : 目前又遇到一个问题,在原始档的*之中,
: : 都会有一组数字如下的1,2,3等
: : ID2*1,2,4*2,3,4*
: : ID3**2*
: : ID4***
: : 但是我想将第一组数字1转成 A1,2转成 A2,4转成 A4
: : 至於第二组数字的2 转成B2,3转成 B3,4转成 B4
: : 之後再对内容作排序
: : 想将内容转为
: : ID2 A1
: : ID2 A2
: : ID2 B2
: : ID2 B3
: : ID2 A4
: : ID2 B4
: : ID3 B2
: : ID4
: : 那这部份取代的写法,我要怎麽写呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.195.44.131
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Perl/M.1397448411.A.EC9.html
※ 编辑: abliou (123.195.44.131), 04/14/2014 12:19:13
1F:→ cutekid:依我理解: 'ID2*1,2,3*2,3,4*' 04/14 12:18
2F:→ cutekid:原 po 要的应该是: 04/14 12:20
3F:→ cutekid:ID2 A1 04/14 12:21
4F:→ cutekid:ID2 A2 04/14 12:21
5F:→ cutekid:ID2 B2 04/14 12:21
6F:→ cutekid:ID2 A3 04/14 12:21
7F:→ cutekid:ID2 B3 04/14 12:21
8F:→ cutekid:ID2 B4 04/14 12:21
9F:→ cutekid:sort by numerical , alphabetical(A,B) 04/14 12:23
原来是忘了排序 XDDDD
sort一下吧
sub{
(length($_[1])+length($_[2])==0)?
print "$_[0]\n" :
sub{
print "$_[0] $_\n" for
@_[1..$#_]
}->(($_[0]),
sort{@{[split'',$a]}[1]<=>@{[split'',$b]}[1]}((map{'A'.$_}(split',',$_[1])),
(map{'B'.$_}(split',',$_[2]))))
}->(/(.+)\*(.*)\*(.*)\*/)
for @data ;
※ 编辑: abliou (123.195.44.131), 04/14/2014 12:29:30
10F:推 AntaresStar:没想过还有sub这招 XD 04/14 20:24
11F:推 cutekid:sub 这招好厉害,从没看过。不知道哪边有相关介绍,请指教 04/15 09:40
12F:→ abliou:老实说 第一次看到这种用法是在这版上看到的 忘记是Lilo 04/16 15:40
13F:→ abliou:还是cindy的文章了 这可能要请教他们这些高手 04/16 15:41
14F:推 cutekid:谢 abliou 大 :) 04/16 15:44
15F:推 yalent:感谢您~ 04/17 23:44
16F:推 CindyLinz:(惊) 04/18 23:42
17F:→ CindyLinz:其实是写 javascript 的常用写法.. XD 04/18 23:42
18F:→ CindyLinz:(function(){....})(); 用在 js 有制造 scope 的效果 :p 04/18 23:42