Perl:搜索数组中的项目

Maj*_*son 3 arrays variables perl hash perl-data-structures

鉴于array @A我们想要检查element $B它是否在其中.一种方法是这样说:

Foreach $element (@A){
    if($element eq $B){
        print "$B is in array A";
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,当它到达Perl时,我总是在思考最优雅的方式.这就是我的想法:如果我们将A转换为变量字符串并使用,有没有办法找出数组A是否包含B

index(@A,$B)=>0
Run Code Online (Sandbox Code Playgroud)

那可能吗?

Nik*_*ain 13

很多方法可以确定元素是否存在于数组中:

  1. 使用foreach

    foreach my $element (@a) {
        if($element eq $b) {
           # do something             
           last;
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用Grep:

    my $found = grep { $_ eq $b } @a;
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用List :: Util模块

    use List::Util qw(first); 
    
    my $found = first { $_ eq $b } @a;
    
    Run Code Online (Sandbox Code Playgroud)
  4. 使用由Slice初始化的哈希

    my %check;
    @check{@a} = ();
    
    my $found = exists $check{$b};
    
    Run Code Online (Sandbox Code Playgroud)
  5. 使用由地图初始化的哈希

    my %check = map { $_ => 1 } @a;
    
    my $found = $check{$b};
    
    Run Code Online (Sandbox Code Playgroud)


yaz*_*azu 6

use 5.10.1;

$B ~~ @A and say '$B in @A';
Run Code Online (Sandbox Code Playgroud)