【发布时间】:2013-08-28 13:15:29
【问题描述】:
我有两个数组,所以我想从一个数组中的两个数组中获取相似的值。
这是数组:
my @a = qw( a e c d );
my @b = qw( c d e f );
请帮助我如何在 Perl 中获得类似的值。我是 Perl 的新手
【问题讨论】:
-
所以你想要一个包含
c,d,e的数组?
标签: perl
我有两个数组,所以我想从一个数组中的两个数组中获取相似的值。
这是数组:
my @a = qw( a e c d );
my @b = qw( c d e f );
请帮助我如何在 Perl 中获得类似的值。我是 Perl 的新手
【问题讨论】:
c,d,e 的数组?
标签: perl
假设最终结果包含两个数组中都存在的元素:
#!/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
【讨论】:
试试下面的方法:
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'
];
【讨论】:
你也可以试试 http://vti.github.io/underscore-perl 一个 underscore-js 的克隆。你可以做 2 个数组的交集 -> http://vti.github.io/underscore-perl/#intersection
use Underscore;
_->intersection([1, 2, 3], [101, 2, 1, 10], [2, 1]);
# [1, 2]
【讨论】:
一种常见的模式是为所见元素映射哈希并使用 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;
【讨论】:
试试这个简单的代码:
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";
【讨论】: