Re: [請益] 在一行code中split兩次

看板Perl作者 (Neisseria)時間9年前 (2014/12/03 11:48), 5年前編輯推噓0(002)
留言2則, 2人參與, 最新討論串3/4 (看更多)
應該就是原文 A 大寫的方法,這裡重寫一次 # 假設 gen_data() 產生出符合本文條件的 data,最下面有 gen_data 的例子 my @data = map { gen_data() } (1..100); for my $i (0..$#data) { my @e = map { [split /B/]->[0] } @{[split /A/, $data[$i]]}[0,2,4]; print "@e\n"; } 這樣子算比較 compact,好不好看個人 如果只是用一次就丟的 script,算蠻方便的寫法 ※ 引述《josefy (醉落~最弱)》之銘言: : 各位版大好, 程式碼如以下 : 假設@data已經從外部讀入 且共有 n 筆 : for($i=0;$i<$n;$i++){ : @temp1=(split(/A/,@data[$i]))[1,3,5]; : # 第一次split用A來做條件, 取第1,3,5個元素 如果要取第 1, 3, 5 個元素,應該是取 0, 2, 4 因為 index 是從 0 開始算 : for($j=0;$j<3;$j++){ # 用迴圈再逐個元素split一次 : @temp2=(split(/B/,@temp1[$j])[1]; # 取第一個元素 : } 這裡可能會有問題,因為 array 要增加 scalar 不是用 assignment 是用 push 或是 unshift 或者是用 Perl 的特性,調整 index,讓 Perl 把 array 自動增長 所以可能可以重寫成 my @temp2; for my $j (0..2) { push @temp2, (split /B/, @temp1[$j])[0]; } : } 最後附上 gen_data 的例子,僅供參考 sub gen_data { my $data = ""; for my $i (1..5) { for my $j (1..3) { $data .= int(rand(10)); # our "data" if ($j < 3) { $data .= 'B'; # separator B } } if ($i < 5) { $data .= "A"; # separator A } } return $data; } ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 203.71.94.31 ※ 文章網址: http://www.ptt.cc/bbs/Perl/M.1417578490.A.8C8.html

12/03 13:28, , 1F
我發覺我把很簡單的()寫成@{[]}了...XD
12/03 13:28, 1F

12/03 13:56, , 2F
好像的確只要用()就可以了,看了覺得很順就 po 上來 XD
12/03 13:56, 2F
※ 編輯: Neisseria (60.251.46.166), 12/24/2018 16:20:09
文章代碼(AID): #1KVeVwZ8 (Perl)
文章代碼(AID): #1KVeVwZ8 (Perl)