预先警告,我是一个Perl新手.
我在寻找一个很好的简写来比较两个数组,说arrA和arrB.
我想知道是否有任何元素arrB不在里面arrA.
如果重要,这些数组中的元素就是字符串.
我知道我可以通过迭代数组并使用来完成这个grep,但我想知道是否有一个很好的速记方式来做到这一点.我的Perl-fu缺乏.
谢谢!
编辑:这是我正在寻找的,以防我上面不清楚.
my @arrA = ( "aaa", "bbb", "ccc" );
my @arrB = ( "aaa", "bbb", "ccc", "ddd" );
my @BnotA = ();
# Something goes here, help!
print "Elements of arrB that are not in arrA: @BnotA\n";
Run Code Online (Sandbox Code Playgroud)
我对这里的数据结构并不挑剔; 如果我可以改变结构以使其更有效,我可以做到这一点.
最有效的方法是从内容构建哈希@arrA.然后@arrB可以快速检查元素以查看它们是否存在@arrA.
像这样
use strict;
use warnings;
my @arrA = ( "aaa", "bbb", "ccc" );
my @arrB = ( "aaa", "bbb", "ccc", "ddd" );
my %arrA_hash = map { $_ => 1 } @arrA;
my @BnotA = grep { not $arrA_hash{$_} } @arrB;
print "Elements of arrB that are not in arrA: @BnotA\n";
Run Code Online (Sandbox Code Playgroud)
产量
Elements of arrB that are not in arrA: ddd
Run Code Online (Sandbox Code Playgroud)
或者,如果您有Array::Utils模块或愿意安装它,您可以使用该模块的array_minus功能.这看起来像这样
use strict;
use warnings;
use Array::Utils 'array_minus';
my @arrA = ( "aaa", "bbb", "ccc" );
my @arrB = ( "aaa", "bbb", "ccc", "ddd" );
my @BnotA = array_minus(@arrB, @arrA);
print "Elements of arrB that are not in arrA: @BnotA\n";
Run Code Online (Sandbox Code Playgroud)
输出与前一个程序的输出相同.
| 归档时间: |
|
| 查看次数: |
94 次 |
| 最近记录: |