[英]Delete value from Perl hash of arrays of hashes
我试图从我使用以下代码创建的哈希数组的哈希值中删除值:
while ((my $Genotype1, my $Fitness1) = each (%Normalisedfithash)) {
while ((my $Parent1A, my $TallyP1) = each(%P1Tallyhash)) {
my $ParentTally = 0;
my $SecondParent = {
Parent2 => $Parent1A,
Tally => $ParentTally,
};
push @{ $StoredParentshash{$Genotype1}}, $SecondParent;
我一直试图删除%StoredParentshash
中Tally
为零的值。 (我还有更新Tally
代码,但有些代码没有更新,我希望它们从哈希中删除)。
我写了以下内容:
for my $Parent (keys %StoredParentshash) {
my $aref1 = $StoredParentshash{$Parent};
for my $hashref1 (@$aref1) {
my $Tally = $hashref1->{'Tally'};
if ($Tally == 0){
delete $hashref1->{'Tally'};
delete $hashref1->{'Parent2'};
}
}
}
这段代码删除了数据,但是当我使用Data::Dumper
,我得到的结构如下所示:
'7412' => [
{},
{
'Tally' => 1,
'Parent2' => '2136'
},
{},
{},
{},
如何完全删除Tally
为零的键而不是{}
?
谢谢!
您的数据如下:
my %StoredParentshash = (
key1 => [
{
Tally => ...,
...
},
...
],
...
);
并且您想要删除一些数组元素。 一般来说,我使用grep
。
@array = grep keep_condition(), @array;
这也不例外。
for my $array (values(%StoredParentshash)) {
@$array = grep $_->{Tally}, @$array;
}
并删除任何现在为空的数组:
for my $key (keys(%StoredParentshash)) {
delete $StoredParentshash{$key} if !@{ $StoredParentshash{$key} };
}
或者合并:
for my $key (keys(%StoredParentshash)) {
my $array = $StoredParentshash{$key};
@$array = grep $_->{Tally}, @$array;
delete $StoredParentshash{$key} if !@$array;
}
您说的代码生成数据结构是错误的,因为它缺少两个结束括号。
在我们可以正确帮助您之前,您必须显示具有平衡{
.. }
实际代码或%StoredParentshash
的转储。
如果Tally
和Parent2
是SecondParent
哈希中唯一的键,那么你应该写类似的东西
for my $children (values %StoredParentshash) {
@$children = grep $_->{Tally} != 0, @$children;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.