可能重複:
How can I check if a Perl array contains a particular value?如何確定一個變量是否屬於一個陣列或另一個在Perl
我有兩個陣列@array1 = (1..26);
,@array2 = ('a'..'z');
和可變$x
。假設$x=5
那麼我怎樣才能比較這個值與兩個數組,並在輸出狀態,該變量屬於@array1
?
可能重複:
How can I check if a Perl array contains a particular value?如何確定一個變量是否屬於一個陣列或另一個在Perl
我有兩個陣列@array1 = (1..26);
,@array2 = ('a'..'z');
和可變$x
。假設$x=5
那麼我怎樣才能比較這個值與兩個數組,並在輸出狀態,該變量屬於@array1
?
如果你想避免爭議智能 - 匹配運算符,您可以使用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";
可以使用smartmatch:
say $x ~~ \@array1 ? 'first'
: $x ~~ \@array2 ? 'second'
: 'none';
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.';
}
注意:'grep'會檢查每個元素,而不是儘快停止,但這很少關心。 – ikegami
[List :: MoreUtils](http://p3rl.org/List::MoreUtils)的'any'函數可以在這裏替換'grep'。但是,如果效率是一個問題,散列版本顯然勝過所有事情,因爲散列查找需要時間不變。 – memowe