gpt4 book ai didi

perl - 我可以在 Perl 中重命名另一个散列中的散列键吗?

转载 作者:行者123 更新时间:2023-12-02 07:38:59 28 4
gpt4 key购买 nike

我有一个散列的散列 (HoH),这是我通过对 mysql 查询使用 select_allhashref 获得的。该格式非常适合我想要的,而且我通过类似的方式还有另外两个 HoH。

我想最终将这些 HoH 合并在一起,唯一的问题(我认为)是一个 HoH 的“子哈希”中有一个键与另一个 HoH 中的键同名。例如

my $statement1 = "select id, name, age, height from school_db";
my $school_hashref = $dbh->selectall_hashref($statement1, 1);

my $statement2 = "select id, name, address, post_code from address_db";
my $address_hashref = $dbh->selectall_hashref($statement2, 1);

所以当我转储数据时,我得到的结果如下:

$VAR1 = {
'57494' => {
'name' => 'John Smith',
'age' => '9',
'height' => '120'
}
}
};
$VAR1 = {
'57494' => {
'name' => 'Peter Smith',
'address' => '5 Cambridge Road',
'post_code' => 'CR5 0FS'
}
}
};

(这是一个示例,所以使用不同的名称可能看起来不合逻辑,但我需要它:))

所以我想将 'name' 重命名为 'address_name' 或类似名称。这可能吗?我知道你能做到

$hashref->{$newkey} = delete $hashref->{$oldkey};

(编辑:这是我在网上找到的示例,但尚未测试。)

但我不知道如何表示 'id' 部分。有什么想法吗?

最佳答案

不知道将它们合并在一起的方式,最简单的解决方案可能是简单地更改 select 语句以重命名结果中的列。而不是事后试图操纵哈希。

my $statement2 = "select id, name as address_name, address, post_code from address_db";    
my $address_hashref = $dbh->selectall_hashref($statement2, 1);

如果这对您来说不是一个现实的选择,那么循环可能是您最好的选择

foreach (keys %{$address_hashref}) {
$address_hashref->{$_}{$newkey} = delete $address_hashref->{$_}{$oldkey}
}

关于perl - 我可以在 Perl 中重命名另一个散列中的散列键吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13238341/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com