簡體   English   中英

PERL,比較2個哈希,列出所有鍵和所有值,即使它們不同

[英]PERL, comparing 2 hashes, list all keys and all values even if they are different

這是我的情況:

%h1 = {
    'a' => 1,
    'b' => 3,
    'c' => 10,
    'x' => 12
}

%h2 = {
    'd' => 3,
    'f' => 5,
    'a' => 10,
    'x' => 0,5
}

我想要這個輸出:

h1, a, 1 | h2, a, 10
h1, c, 10 | h2, c, -
h1, f, - | h2, f, 5

等等...用我的代碼我可以比較兩個哈希,如果鍵是相同的,但我不能做任何其他事情

foreach my $k(keys(%bg)) {
    foreach my $k2 (keys(%sys)) {
        if ($k eq $k2){
            print OUT "$k BG :  $bg{$k} SYS: $sys{$k2}\n";
        }
    }
}

聽起來你只想迭代兩個哈希之間的唯一鍵:

use strict;
use warnings;

use List::MoreUtils qw(uniq);

my %h1 = ('a' => 1, 'b' => 3, 'c' => 10, 'x' => 12);
my %h2 = ('a' => 10, 'd' => 3, 'f' => 5, 'x' => 0);

for my $k (sort +uniq (keys %h1, keys %h2)) {
    printf "%s h1: %-2s h2: %-2s\n", map {$_//'-'} ($k, $h1{$k}, $h2{$k});
}

輸出:

a h1: 1  h2: 10
b h1: 3  h2: -
c h1: 10 h2: -
d h1: -  h2: 3
f h1: -  h2: 5
x h1: 12 h2: 0
#!/usr/bin/env perl

use strict;
use warnings;

use Text::Table;

my %h1 = ('a' => 1, 'b' => 3, 'c' => 10, 'x' => 12);
my %h2 = ('a' => 10, 'd' => 3, 'f' => 5, 'x' => 0);

my $table = Text::Table->new(
    'Key',    \' | ',
    'Hash 1', \' | ',
    'Hash2'
);

$table->load(
    map [$_, $h1{$_}, $h2{$_}],
    sort keys %{{ map {$_ => 1} keys %h1, keys %h2}}
);

print $table;

輸出:

Key | Hash 1 | Hash2
a   |  1     | 10
b   |  3     |
c   | 10     |
d   |        |  3
f   |        |  5
x   | 12     |  0

我認為你需要在哈希上完全連接。通過第一個哈希並從第二個哈希中獲取相應的值並對第二個哈希執行相同的操作。

my %h1 = (
'a' => 1,
'b' => 3,
'c' => 10,
'x' => 12
);

my %h2 = (
'd' => 3,
'f' => 5,
'a' => 10,
'x' => 0
);

my %res;

foreach my  $k (keys %h1){
 $res{$k}="h1" . "," . "$k"   . "," . ($h1{$k} eq "" ? "-" : $h1{$k}) . "|" . "h2" . "," . "$k" . "," . ($h2{$k} eq "" ? "-" : $h2{$k});
}


foreach my  $k (keys %h2){
 $res{$k}="h1" . "," . "$k"   . "," . ($h1{$k} eq "" ? "-" : $h1{$k}) . "|" . "h2" . "," . "$k" . "," . ($h2{$k} eq "" ? "-" : $h2{$k});
}


foreach my $k (sort keys %res){
print $res{$k} . "\n"; 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM