由于类似的键,哈希值会覆盖吗?

时间:2018-01-30 19:25:03

标签: perl hash

我想将数据从德国数据结构映射到英语数据结构。

为此,我使用一个哈希,它将德语单词保存为键,将英语单词保存为值($ mapping_table)。

数据存储在哈希数组($ data)中。键是德语单词,必须由英语单词替换。值是保持不变的数据。

为了进行映射,我编写了以下代码:

my $mapping_table = {
    'Exemplare' => 'copies',
    'Seiten' => 'pages',
    'Statushinweis' => 'status',
    'Serie von' => 'number_of',
    'ISBN/Barcode-Nr.' => 'ISBN_barcode',
    'Status' => 'status',
};

my $data = [
  {
    'Exemplare' => '1',
    'Seiten' => '0',
    'Statushinweis' => 'Statushinweis',
    'ISBN/Barcode-Nr.' => '3-551-01561-9',
    'Serie von' => '4',
    'Status' => 'Gesucht'
  },
  {
    'Exemplare' => '4',
    'Seiten' => '111',
    'Statushinweis' => '',
    'ISBN/Barcode-Nr.' => '3-551-01561-9',
    'Serie von' => '4',
    'Status' => 'Vorhanden'
  }
];

my $mapped_data = [];

foreach my $issue ( @$data ) {
    my %tmp_hash;
    foreach my $key (sort keys %$mapping_table) {
        $tmp_hash{$mapping_table->{$key}} = $issue->{$key};
    }
    push @$mapped_data, \%tmp_hash;
}

print Dumper $mapped_data;

转储的结果给我带来了很多惊喜。

$VAR1 = [
          {
            'number_of' => '4',
            'copies' => '1',
            'status' => 'Statushinweis',
            'ISBN_barcode' => '3-551-01561-9',
            'pages' => '0'
          },
          {
            'pages' => '111',
            'ISBN_barcode' => '3-551-01561-9',
            'status' => '',
            'copies' => '4',
            'number_of' => '4'
          }
    ];

可以看出键的状态'状态'持有那些钥匙' Statushinweis'而这些钥匙完全丢失了。

我试图弄清楚为什么会在Google和调试器的帮助下发生这种情况但却失败了(可能很明显可见?)。

也许我应该提一下,我在Win7上使用草莓perl 5.26.1。

知道我做错了什么以及如何解决它?

提前谢谢。

0 个答案:

没有答案