鉴于:

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表示您将它们视为集合。

编辑:更改增量以分配-保存哈希值的读取

10-06 05:26