从array1中打印那些不在array2中的元素

时间:2014-05-15 09:37:25

标签: perl difference

我的作业要求两个数组的区别。更具体地说,我们被问到“结果是一个包含第一个数组中但不存在于第二个数组中的元素的数组。”

这是否意味着作为我的输出的第3个数组应该具有两个数组中存在的值的交集?例如,我有两个数组:

@list1 = ( 1, 2, 3, 4, 5, 6, 7, 8, 9 );
@list2 = ( 3, 5, 7, 11, 13, 15 );

我的输出应该是( 3, 5, 7 )吗?

1 个答案:

答案 0 :(得分:1)

  

结果是一个包含第一个元素的数组   数组,但不在第二个。

这意味着所需的输出为(1, 2, 4, 6, 8, 9)

Demo

#!/usr/bin/perl
# your code goes here
my @array1 = ( 1, 2, 3, 4, 5, 6, 7, 8, 9 ) ; 
my @array2 = ( 3, 5, 7, 11, 13, 15 ) ;
my %tmp ;

# Store all entries of array2 as hashkeys (values are undef) using a hashslice
@tmp{@array1} = undef ; 

# delete all entries of array1 from hash using another hashslice
delete @tmp{@array2} ;
printf "In Array1 but not in Array2 : %s\n" , join( ',' , keys %tmp ) ;

使用Array::Utils模块:

#!/usr/bin/perl
use strict;
use warnings;
use Array::Utils qw(:all);
my @a = qw( 1 2 3 4 5 6 7 8 9 );
my @b = qw( 3 5 7 11 13 15 );
my @minus = array_minus(@a, @b);
print @minus;

另请检查perlfaq:How do I compute the difference of two arrays? How do I compute the intersection of two arrays