Arrays 如何在perl中识别变量是属于一个数组还是另一个数组
可能重复:Arrays 如何在perl中识别变量是属于一个数组还是另一个数组,arrays,perl,Arrays,Perl,可能重复: 我有两个数组@array1=(1..26),@array2=('a'..'z')和变量$x。假设$x=5,那么如何将此值与两个数组进行比较,并在输出中声明此变量属于@array1?您可以使用smartmatch: say $x ~~ \@array1 ? 'first' : $x ~~ \@array2 ? 'second' : 'none'; Perl 5.10及更高版本有一个新的智能匹配操作符,可以轻松完成此任务: if ($x ~~ @array1) {
我有两个数组
@array1=(1..26)代码>,@array2=('a'..'z')
和变量$x
。假设$x=5
,那么如何将此值与两个数组进行比较,并在输出中声明此变量属于@array1
?您可以使用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
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";
注意:grep
将检查每个元素,而不是尽快停止,但这很少是一个问题。任何函数都可以在此处替换grep
。但如果效率是一个问题,那么很明显哈希版本的性能优于一切,因为哈希查找需要固定的时间。