【问题标题】:Get Similar Values from 2 Arrays in Perl [duplicate]从 Perl 中的 2 个数组中获取相似值 [重复]
【发布时间】:2013-08-28 13:15:29
【问题描述】:

我有两个数组,所以我想从一个数组中的两个数组中获取相似的值。

这是数组:

my @a = qw( a e c d );
my @b = qw( c d e f );

请帮助我如何在 Perl 中获得类似的值。我是 Perl 的新手

【问题讨论】:

标签: perl


【解决方案1】:

假设最终结果包含两个数组中都存在的元素:

#!/usr/bin/perl -w
use strict;
my @a = qw( a e c d );
my @b = qw( c d e f );
my @c;

foreach my $x (@a)
{
    foreach my $y (@b)
    {
        push @c, $x if ($x eq $y);
    }
}

foreach (@c) {print $_."\n"};

输出:

e
c
d

【讨论】:

    【解决方案2】:

    试试下面的方法:

    use strict;
    use Data::Dumper;
    
    my @a1 = qw( a e c d );
    my @b1 = qw( c d e f );
    
    my %seen;
    my @final;
    
    @seen{@a1} = (); # hash slice
    
    foreach my $new ( @b1 ) {
        push (@final, $new ) if exists $seen{$new};
    }
    
    print Dumper(\@final);
    

    输出:

    $VAR1 = [
              'c',
              'd',
              'e'
            ];
    

    【讨论】:

    • 非常感谢您的帮助
    • 请您解释一下我们在 @seen{@a1}=(); 然后是 foreach 中所做的事情
    【解决方案3】:

    你也可以试试 http://vti.github.io/underscore-perl 一个 underscore-js 的克隆。你可以做 2 个数组的交集 -> http://vti.github.io/underscore-perl/#intersection

    use Underscore;
    _->intersection([1, 2, 3], [101, 2, 1, 10], [2, 1]);
    # [1, 2]
    

    【讨论】:

      【解决方案4】:

      一种常见的模式是为所见元素映射哈希并使用 grep 搜索另一个数组。

      my @a = qw( a e c d );
      my @b = qw( c d e f );
      
      my %seen = map { $_ => 1 } @a;
      my @intersection = grep { $seen{$_} } @b;
      
      print @intersection;
      

      【讨论】:

        【解决方案5】:

        试试这个简单的代码:

        my @a = qw( a e c d );
        
        my @b = qw( c d e f );
        
        foreach $my(@a){
        
                print "$my\n";
                if ((grep(/$my/,@b))){
                        push @new,$my;
                }
        
        }
        print "new----@new";
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-06-10
          • 2015-07-07
          • 1970-01-01
          • 2021-03-10
          • 1970-01-01
          • 1970-01-01
          • 2015-10-19
          • 1970-01-01
          相关资源
          最近更新 更多