鉴于:
my @mylist1; push(@mylist1,"A"); push(@mylist1,"B"); push(@mylist1,"C"); my @mylist2; push(@mylist2,"A"); push(@mylist2,"D"); push(@mylist2,"E");
在Perl中最快的方式是在mylist2中插入mylist1中的所有元素,而不是已经存在于mylist2(ABCDE)中.
你可以使用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
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
暗示你将它们视为集合.
编辑:将增量更改为assign - 保存读取哈希值