我在我的数据结构中有一个散列的散列,即散列和散列引用。当我只有主散列名而没有最深散列的键时,我可以迭代最深的散列吗?
my %gates_info=(
'order' => {
'nand' => {
'nand2_1' =>2,
'nand2_5' =>-1,
'nand2_4' =>2,
'nand2_6' =>-1,
'nand2_2' =>2,
'nand2_3' =>3
},
'and' => {
'and2'=>1,
'and3'=>2,
},
}
);
sub max_gate_order {
print values (%{$gates_info{'order'}});
my @arr = (sort {$a <=> $b} values %{$gates_info{'order'}});
return $arr[-1];
}当我只有它的名字%gates_info而没有诸如"nand“或”%gates_info“之类的键时,我想迭代整个散列。我试图实现的是通过排序获得每个门中的最高数值。例如在nand情况下为3,在and情况下为2。子max_gate_order用于排序并返回最高值。谢谢
发布于 2019-04-18 19:38:57
keys会给你那些钥匙的
sub max_gate_order {
my ($gates_info) = @_;
my $max_order;
my @gates;
for my $gate_type (keys %{ $gates_info->{order} }) {
for my $gate_id (keys %{ $gates_info->{order}{$gate_type} }) {
my $order = $gates_info->{order}{$gate_type}{$gate_id};
$max_order //= $order;
if ($order >= $max_order) {
if ($order > $max_order) {
$max_order = $order;
@gates = ();
}
push @gates, $gate_id;
}
}
}
return @gates;
}
my @gates = max_gate_order(\%gates_info);上面的代码返回所有具有最高顺序的门。
如果同时需要门类型和门id,请替换
push @gates, $gate_id;使用
push @gates, [ $gate_type, $gate_id ];或
push @gates, [ $gate_type, $gate_id, $order ];发布于 2019-04-18 19:17:13
sub max_gate_order {
my %hash =();
foreach my $k (keys %{$gates_info{'order'}}) {
my @arr = (sort {$a <=> $b} values %{$gates_info{'order'}->{$k}});
$hash{$k} = $arr[-1];
}
return \%hash;
}https://stackoverflow.com/questions/55744057
复制相似问题