我有Perl中的哈希引用数组。我需要比较它们,也就是说,有效地执行array_minus()所做的事情,但我需要根据哈希的内容而不是引用来进行比较。
拿这辆MWE:
#!/usr/bin/perl
use Array::Utils qw(:all);
use Data::Dumper;
my %en = ( 'first' => 'one', 'second' => 'two', 'third' => 'three' );
my %en2 = ( 'first' => 'one', 'second' => 'two', 'third' => 'three' );
my %eo = ( 'first' => 'unu', 'second' => 'du', 'third' => 'tri' );
my @set = ( \%en, \%eo );
my @subset = ( \%en2 );
print(Dumper(array_minus(@set,@subset)));我相信array_minus()比较了不同的引用,因此输出如下:
$VAR1 = {
'first' => 'one',
'second' => 'two',
'third' => 'three'
};
$VAR2 = {
'first' => 'unu',
'second' => 'du',
'third' => 'tri'
};是否有一种替代方案,或一种选项,可以根据散列的内容进行比较?当然,当MWE中的散列不被引用包含时,比较工作正确,并且只返回一个散列。
发布于 2016-02-23 12:10:12
像这样的东西应该能起作用(未经测试):
sub serialize {
use JSON::XS;
JSON::XS->new->pretty(0)->ascii(1)->canonical(1)->encode($_[0])
}
sub array_minus_deep(\@\@) {
my ($array,$minus) = @_;
my %minus = map( ( serialize($_) => 1 ), @$minus );
grep !$minus{ serialize($_) }, @$array
}https://stackoverflow.com/questions/35575873
复制相似问题