比较两个数组的哈希值

Lea*_*Cpp 2 arrays perl hash

我有两个数组,哈希保存这些数组

 Array 1:
  my $group = "west"
  @{ $my_big_hash{$group} } = (1534,2341,2322,3345,689,3333,4444,5533,3334,5666,6676,3435);

 Array 2 :

   my $element = "Location" ;
   my $group  = "west" ;
   @{ $my_tiny_hash{$element}{$group} } =  (153,333,667,343);
Run Code Online (Sandbox Code Playgroud)

现在我想比较一下

@ {$ my_tiny_hash {$ element} {$ group}}

@ {$ my_big_hash {$ group}}

并检查微小哈希数组的所有元素是否都是big_hash数组的一部分.正如我们所看到的,微小哈希只有3位元素,如果我们只比较前3位数字,所有这些元素都与大哈希匹配

如果前三个数字/字母匹配并且所有都在大数组中可用,那么它的匹配或我们必须打印不匹配的元素

它是一个阵列比较.我们如何实现它.

PS:没有Array Utils,如何实现它

使用Array Utils的解决方案非常简单

my @minus = array_minus( @{ $my_tiny_hash{$element}{$group} } , @{ $my_big_hash{$group} }  );
Run Code Online (Sandbox Code Playgroud)

但它比较所有数字,我只想匹配前3位数

希望这很清楚

谢谢

Dav*_*oss 7

这似乎做你想要的.

#!/usr/bin/perl

use strict;
use warnings;
use 5.010;

my (%big_hash, %tiny_hash);
my $group = 'west';
my $element = 'Location';

# Less confusing initialisation!
$big_hash{$group} = [1534,2341,2322,3345,689,3333,4444,5533,3334,5666,6676,3435];
$tiny_hash{$element}{$group} = [153,333,667,343];

# Create a hash where the keys are the first three digits of the numbers
# in the big array. Doesn't matter what the values are.
my %check_hash = map { substr($_, 0, 3) => 1 } @{ $big_hash{$group} };

# grep the small array by checking the elements' existence in %check_hash
my @missing = grep { ! exists $check_hash{$_} } @{ $tiny_hash{$element}{$group} };

say "Missing items: @missing";
Run Code Online (Sandbox Code Playgroud)

更新:另一个似乎更接近原始代码的解决方案.

my @truncated_big_array = map { substr($_, 0, 3) } @{ $big_hash{$group} };
my @minus = array_minus( @{ $my_tiny_hash{$element}{$group} } , @truncated_big_array );
Run Code Online (Sandbox Code Playgroud)

  • 逻辑与你的逻辑相同.我只是有点terser :-) (2认同)