鉴于:
my @mylist1;
push(@mylist1,"A");
push(@mylist1,"B");
push(@mylist1,"C");
my @mylist2;
push(@mylist2,"A");
push(@mylist2,"D");
push(@mylist2,"E");
在Perl中,最快的方法是将所有在mylist1中但尚未在mylist2(ABCDE)中的元素插入到mylist2中。
最佳答案
my %k;
map { $k{$_} = 1 } @mylist1;
map { $k{$_} = 1 } @mylist2;
@mylist2 = keys %k;
或者:
my %k;
map { $k{$_} = 1 } @mylist2;
push(@mylist2, grep { !exists $k{$_} } @mylist1);
实际上-这些可能是错误的,因为它们无法说明两个原始列表中是否存在重复项。
您没有在问题中说列表是应该表示集合(不能包含重复项)还是仅表示简单列表。您实际上想要
@mylist2 = @mylist1 U @mylist2
表示您将它们视为集合。编辑:更改增量以分配-保存哈希值的读取