当前位置:  开发笔记 > 编程语言 > 正文

如何从一个Perl数组中添加尚未包含在另一个数组中的元素?

如何解决《如何从一个Perl数组中添加尚未包含在另一个数组中的元素?》经验,为你挑选了2个好方法。

鉴于:

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)中.



1> oeuftete..:

你可以使用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


学习识别和使用模块是学习perl的一个非常重要的部分.

2> Alnitak..:
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 - 保存读取哈希值

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有