首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在不知道散列的键的情况下,我如何迭代散列的嵌套散列?

在不知道散列的键的情况下,我如何迭代散列的嵌套散列?
EN

Stack Overflow用户
提问于 2019-04-18 18:25:14
回答 2查看 227关注 0票数 0

我在我的数据结构中有一个散列的散列,即散列和散列引用。当我只有主散列名而没有最深散列的键时,我可以迭代最深的散列吗?

代码语言:javascript
运行
复制
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用于排序并返回最高值。谢谢

EN

回答 2

Stack Overflow用户

发布于 2019-04-18 19:38:57

keys会给你那些钥匙的

代码语言:javascript
运行
复制
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,请替换

代码语言:javascript
运行
复制
push @gates, $gate_id;

使用

代码语言:javascript
运行
复制
push @gates, [ $gate_type, $gate_id ];

代码语言:javascript
运行
复制
push @gates, [ $gate_type, $gate_id, $order ];
票数 2
EN

Stack Overflow用户

发布于 2019-04-18 19:17:13

代码语言:javascript
运行
复制
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;

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55744057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档