[問題] 用什麼方法知道現在是 foreach 裡的最後一個?
程式情境類似這樣:
@a 是某個外來陣列
my $counter = 0; # 記錄 @a 裡面有幾個符合條件的
my $good = 0; # 最後的結果
for my $a (@a) {
if( $a 滿足某條件 ) {
++$counter;
if( $counter==5 && $a 是 @a 的最後一項 ) {
$good = 1;
}
}
}
想問大家有沒有什麼有趣的寫法? ^^
我試了幾個, 不過感覺好像都有可挑的地方..
# 我覺得額外弄一個語法上看起來跟迴圈沒關聯的迴圈計數器很不開心 ><
my $i = 0;
for my $a (@a) {
++$i;
if( $a 滿足某條件 ) {
++$counter;
if( $counter==5 && $i==$#a ) {
$good = 1;
}
}
}
# 我覺得裡面要寫成 $a[$i] 很不開心 ><
for my $i (0..$#a) {
if( $a[$i] 滿足某條件 ) {
++$counter;
if( $counter==5 && $i==$#a ) {
$good = 1;
}
}
}
# 我覺得要複製 $a = $a[$i] 很不開心 ><
for my $i (0..$#a) {
my $a = $a[$i];
if( $a 滿足某條件 ) {
++$counter;
if( $counter==5 && $i==$#a ) {
$good = 1;
}
}
}
# 我覺得 滿足某條件 要跑兩次很不開心 ><
for my $a (@a) {
if( $a 滿足某條件 ) {
++$counter;
}
}
if( $counter==5 && $a[-1] 滿足某條件 ) {
$good = 1;
}
# 我覺得 perl 5.12 才能用很不開心 ><
# 而且 while 裡面最好不要有 last, 不然有一天會後悔..
# 不過這是這幾個裡面我自己覺得看起來最順眼的一個 @@"
while( my($i, $a) = each @a ) {
if( $a 滿足某條件 ) {
++$counter;
if( $counter==5 && $i==$#a ) {
$good = 1;
}
}
}
# 整理一下 scwg 的推文放上來正文 :p
$good = $a[-1] 滿足某條件 && 5 == grep {$_ 滿足某條件} @a;
$good = $a[-1] 滿足某條件 && 4 == grep {$_ 滿足某條件} @a[0..$#a-1];
for my $a (@a) {
if( $a 滿足某條件 ) {
++$counter;
if( $counter==5 && \$a==\$a[-1] ) {
$good = 1;
}
}
}
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 112.121.80.249
※ 文章網址: http://www.ptt.cc/bbs/Perl/M.1409251242.A.EDB.html
→
08/29 03:35, , 1F
08/29 03:35, 1F
→
08/29 03:40, , 2F
08/29 03:40, 2F
→
08/29 03:41, , 3F
08/29 03:41, 3F
→
08/29 03:54, , 4F
08/29 03:54, 4F
→
08/29 03:54, , 5F
08/29 03:54, 5F
推
08/29 06:03, , 6F
08/29 06:03, 6F
→
08/29 11:51, , 7F
08/29 11:51, 7F
→
08/29 11:55, , 8F
08/29 11:55, 8F
→
08/29 11:55, , 9F
08/29 11:55, 9F
※ 編輯: CindyLinz (112.121.80.249), 08/29/2014 14:01:25
推
08/29 14:16, , 10F
08/29 14:16, 10F
→
08/29 16:02, , 11F
08/29 16:02, 11F
推
08/29 16:27, , 12F
08/29 16:27, 12F
推
08/29 16:30, , 13F
08/29 16:30, 13F
推
09/05 11:42, , 14F
09/05 11:42, 14F
→
09/05 12:33, , 15F
09/05 12:33, 15F
→
09/05 13:51, , 16F
09/05 13:51, 16F
→
09/05 13:51, , 17F
09/05 13:51, 17F
→
09/05 13:51, , 18F
09/05 13:51, 18F
→
09/05 13:52, , 19F
09/05 13:52, 19F
→
09/05 13:52, , 20F
09/05 13:52, 20F
→
09/05 13:52, , 21F
09/05 13:52, 21F
推
09/05 15:03, , 22F
09/05 15:03, 22F
→
09/05 20:02, , 23F
09/05 20:02, 23F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):
Perl 近期熱門文章
PTT數位生活區 即時熱門文章