从Perl中的2个数组中获取类似的值

时间:2013-08-26 05:57:35

标签: perl

我有两个数组,所以我想从数组中的两个数组中获取相似的值。

这是数组:

my @a = qw( a e c d );
my @b = qw( c d e f );

请帮助我如何在Perl中获得类似的值。我是Perl的新手

5 个答案:

答案 0 :(得分:2)

尝试这个简单的代码:

my @a = qw( a e c d );

my @b = qw( c d e f );

foreach $my(@a){

        print "$my\n";
        if ((grep(/$my/,@b))){
                push @new,$my;
        }

}
print "new----@new";

答案 1 :(得分:1)

尝试以下内容:

use strict;
use Data::Dumper;

my @a1 = qw( a e c d );
my @b1 = qw( c d e f );

my %seen;
my @final;

@seen{@a1} = (); # hash slice

foreach my $new ( @b1 ) {
    push (@final, $new ) if exists $seen{$new};
}

print Dumper(\@final);

输出:

$VAR1 = [
          'c',
          'd',
          'e'
        ];

答案 2 :(得分:0)

假设最终结果包含两个数组中都存在的元素:

#!/usr/bin/perl -w
use strict;
my @a = qw( a e c d );
my @b = qw( c d e f );
my @c;

foreach my $x (@a)
{
    foreach my $y (@b)
    {
        push @c, $x if ($x eq $y);
    }
}

foreach (@c) {print $_."\n"};

输出:

e
c
d

答案 3 :(得分:0)

你也可以尝试http://vti.github.io/underscore-perl下划线-js的克隆。你可以做2个阵列的交集 - > http://vti.github.io/underscore-perl/#intersection

use Underscore;
_->intersection([1, 2, 3], [101, 2, 1, 10], [2, 1]);
# [1, 2]

答案 4 :(得分:0)

一种常见的模式是映射已查看元素的哈希值,并使用grep搜索其他数组。

my @a = qw( a e c d );
my @b = qw( c d e f );

my %seen = map { $_ => 1 } @a;
my @intersection = grep { $seen{$_} } @b;

print @intersection;