Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何在perl中识别变量是属于一个数组还是另一个数组_Arrays_Perl - Fatal编程技术网

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
。但如果效率是一个问题,那么很明显哈希版本的性能优于一切,因为哈希查找需要固定的时间。