如何在没有任何重复的情况下合并两个数组

Tre*_*ree 4 perl

@tools = ("hammer", "chisel", "screwdriver", "boltcutter",
           "tape", "punch", "pliers"); 
@fretools =("hammer", "chisel", "screwdriver" ,"blade");

push @tools,@fretools if grep @tools,@fretools
Run Code Online (Sandbox Code Playgroud)

我得到了工具

  @tools=("hammer", "chisel", "screwdriver", "boltcutter", 
       "tape", "punch", "pliers", "blade");
Run Code Online (Sandbox Code Playgroud)

有什么简单的方法吗?

too*_*lic 9

列表:: MoreUtils CPAN模块有一个uniq函数来做到这一点.如果您不想依赖于安装此模块,您只需uniq从模块的源代码中复制该函数(因为它是纯Perl)并将其直接粘贴到您自己的代码中(具有适当的确认).通常,使用CPAN代码的优势在于其行为已记录在案并且经过了充分测试.

use strict;
use warnings;
use Data::Dumper;

sub uniq (@) {
    # From CPAN List::MoreUtils, version 0.22
    my %h;
    map { $h{$_}++ == 0 ? $_ : () } @_;
}

my @tools = ("hammer", "chisel", "screwdriver", "boltcutter",
             "tape", "punch", "pliers"); 
my @fretools =("hammer", "chisel", "screwdriver" ,"blade");
@tools = uniq(@tools, @fretools);
print Dumper(\@tools);

__END__

$VAR1 = [
          'hammer',
          'chisel',
          'screwdriver',
          'boltcutter',
          'tape',
          'punch',
          'pliers',
          'blade'
        ];
Run Code Online (Sandbox Code Playgroud)

  • +1一个更紧凑的变体:`map {$ h {$ _} ++?():$ _} @ _`. (4认同)