2012-11-01 21 views

回答

2

如果你想避免爭議智能 - 匹配運算符,您可以使用grep

say grep { $x eq $_ } @array1 ? "first" 
    : grep { $x eq $_ } @array2 ? "second" 
    : "none"; 

如果你反覆這樣做,你應該在這裏使用哈希。

my %array1 = map { $_ => 1 } @array1; 
my %array2 = map { $_ => 1 } @array2; 

say $array1{$x} ? "first" 
    : $array2{$x} ? "second" 
    : "none"; 
+0

注意:'grep'會檢查每個元素,而不是儘快停止,但這很少關心。 – ikegami

+0

[List :: MoreUtils](http://p3rl.org/List::MoreUtils)的'any'函數可以在這裏替換'grep'。但是,如果效率是一個問題,散列版本顯然勝過所有事情,因爲散列查找需要時間不變。 – memowe

3

可以使用smartmatch:

say $x ~~ \@array1 ? 'first' 
    : $x ~~ \@array2 ? 'second' 
    : 'none'; 
5

Perl的5.10和更大的有一個新的智能匹配操作,使得這一任務的輕鬆的工作:

if ($x ~~ @array1) { 
    say '$x is in @array1'; 
} 
elsif ($x ~~ @array2) { 
    say '$x is in @array2'; 
} 
else { 
    say '$x is not in either array.'; 
} 
相關問題