鉴于:
my @mylist1;
push(@mylist1,"A");
push(@mylist1,"B");
push(@mylist1,"C");
my @mylist2;
push(@mylist2,"A");
push(@mylist2,"D");
push(@mylist2,"E");
Run Code Online (Sandbox Code Playgroud)
在Perl中最快的方式是在mylist2中插入mylist1中的所有元素,而不是已经存在于mylist2(ABCDE)中.
oeu*_*ete 23
你可以使用List::MoreUtils模块uniq:
use List::MoreUtils qw(uniq);
my @mylist1;
push( @mylist1, "A" );
push( @mylist1, "B" );
push( @mylist1, "C" );
my @mylist2;
push( @mylist2, "A" );
push( @mylist2, "D" );
push( @mylist2, "E" );
@mylist2 = uniq( @mylist1, @mylist2 );
printf "%s\n", ( join ',', @mylist2 ); # A,B,C,D,E
Run Code Online (Sandbox Code Playgroud)
Aln*_*tak 12
my %k;
map { $k{$_} = 1 } @mylist1;
map { $k{$_} = 1 } @mylist2;
@mylist2 = keys %k;
Run Code Online (Sandbox Code Playgroud)
或者:
my %k;
map { $k{$_} = 1 } @mylist2;
push(@mylist2, grep { !exists $k{$_} } @mylist1);
Run Code Online (Sandbox Code Playgroud)
实际上 - 这些可能是错误的,因为它们没有考虑原始列表中是否存在重复项.
您没有在您的问题中说明列表是否应该表示集合(不能包含重复项)或仅表示普通列表.你有效地想要的是@mylist2 = @mylist1 U @mylist2暗示你将它们视为集合.
编辑:将增量更改为assign - 保存读取哈希值