arrays - Perl:显示 HoA 中的元素差异
问题描述
有没有办法在这个代码场景中显示单个元素的差异?我已经搜索和搜索并尝试了近 4 个小时的多行代码。目前它显示了整个不同的键:值数据集,我希望它显示或需要显示的是 ent5:440。
谢谢!
use strict;
use warnings;
my @diff = list_diff(keys %vlans_A, keys %vlans_B);
print "Difference in keys: ", @diff, "\n" if @diff;
KEY:
foreach my $key (keys %vlans_A) {
next KEY unless exists $vlans_B{$key};
my @diff = list_diff(@{ $vlans_A{$key} },@{ $vlans_B{$key} });
print "Difference at key $key: ", @diff, "\n" if @diff;
}
sub list_diff {
my %keys;
$keys{$_}++ for @_;
return grep 2 != $keys{$_}, keys %keys;
}
Difference at key ent5: 102 103 433 440 1803 1806 1808 1809 1814 1815 1822 1866 1867 1898 2002102 103 433 1803 1806 1808 1809 1814 1815 1822 1866 1867 1898 2002
$VAR1 = {
'ent5' => [
'102 103 433 440 1803 1806 1808 1809 1814 1815 1822 1866 1867 1898 2002'
],
'ent4' => [
'409 432 434 435 436 1702 1703 1802 1805 1851 1852 1854 1855 1857 1858 1863 1864 1870 2001'
],
'ent9' => [
'4094'
]
};
$VAR1 = {
'ent5' => [
'102 103 433 1803 1806 1808 1809 1814 1815 1822 1866 1867 1898 2002'
],
'ent4' => [
'409 432 434 435 436 1702 1703 1802 1805 1851 1852 1854 1855 1857 1858 1863 1864 1870 2001'
],
'ent9' => [
'4094'
]
};
解决方案
这是一种方法,在空白处拆分值:
KEY:
for my $key (keys %vlans_A) {
next KEY unless exists $vlans_B{$key};
my @diff = list_diff(get_values($vlans_A{$key}), get_values($vlans_B{$key}));
print "Difference at key $key: @diff\n" if @diff;
}
sub get_values {
my ( $key_strs ) = @_;
my @keys;
for my $str ( @$key_strs ) {
push @keys, split " ", $str;
}
return @keys;
}
sub list_diff {
my %keys;
$keys{$_}++ for @_;
return grep 2 != $keys{$_}, keys %keys;
}
推荐阅读
- python - 如何在 CodeHS Python 中完成 8.4.13 Owls,第 2 部分问题?
- javascript - 控制器方法不会有参数
- azure-devops - 如何将 nuget 预发布包发布到提要?
- c - 在顶层理解“'const',这可能会降低代码的可读性而不提高 const 的正确性”
- string - 这个编程问题的算法是什么?
- javascript - 从中获取信息
- delphi - 从 Delphi 10 中的资源文件中读取字符串
- machine-learning - 层次聚类中的数据点
- haskell - threepenny-gui: 关闭窗口
- ruby-on-rails - 如何暂时禁用“needs_migration”?测试迁移时检查?