Perl:在两个哈希数组之间获得差异?

时间:2014-12-20 06:13:54

标签: arrays perl hash

我有两个包含哈希的数组引用:

$A = [
  {
    "t" => "1419054300000",
    "v" => "28.1"
  },
  {
    "t" => "1419053400000",
    "v" => "28.2"
  },
  {
    "t" => "1419052500000",
    "v" => "28.4"
  }
];

$B = [
  {
    "t" => "1419053400000",
    "v" => "28.2"
  },
  {
    "t" => "1419052500000",
    "v" => "28.4"
  }
];

我希望来自$A的哈希值,t中的一个哈希值中不存在$B的值{每个arrayref t值是唯一的,v不是。

我认为有一些明显的方法可以做到这一点,但是我一整天都没有成功地反对这一点。

2 个答案:

答案 0 :(得分:1)

您可以使用perl5i diff method

use perl5i::2;

...initialize $A and $B...

say $A->diff($B)->mo->as_perl;
__END__
[
  {
    't' => '1419054300000',
    'v' => '28.1'
  }
]

答案 1 :(得分:1)

与往常一样,您可以构建哈希查找,其中键是要过滤掉的元素,

my %seen;
@seen{ map $_->{t}, @$B } = ();

my $C = [
  grep { !exists $seen{$_->{t}} } @$A
];