在HoH的第一级密钥上的Perl Data :: Dumper数字排序

 手机用户2502910463 发布于 2023-02-13 12:43

我有一个HoH数据结构.外层哈希的键是数字的 - 所以我想转储由第一个哈希键数字排序的HoH(不关心内部哈希的顺序).我一直在尝试不同的Sortkeys潜艇......

use Data::Dumper;
#$Data::Dumper::Sortkeys = sub { [sort { $a <=> $b } (keys %{$_[0]})] };  ## A
 $Data::Dumper::Sortkeys = sub { [sort { $a <=> $b } keys %$_ ] };       ## B
print Dumper(\%dsCmdBlocks);

我似乎无法在Sortkeys子例程中找到正确的语法,它将以数字方式转储由第一个键排序的HoH.当我尝试"A"时,它对第一个键进行排序很好,但它也吐出错误消息,说内部参数不是数字(这是由于使用了[0].所以"A"不是这是正确的方法.但我似乎无法在我的生活中弄清楚如何仅对第一个哈希进行排序.顺便说一下 - 当我通过一个正常的foreach循环发送HoH时:

foreach my $sk (sort {$a<=>$b} keys %dsCmdBlocks)
{
 print "KEY: $sk\n";
}

它按预期工作.

那么如何将我的Sortkeys子设置为仅对第一个哈希键进行排序?

1 个回答
  • 回调用于$Data::Dumper::Sortkeys对数据结构中的任何哈希引用进行操作.所以你可以强化你的排序例程来对抗非数字输入,比如

    $Data::Dumper::Sortkeys = sub {
        no warnings 'numeric';
        [ sort { $a <=> $b } keys %{$_[0]} ]
    };
    

    或者应用其他一些阴谋来看看你的输入是什么样的

    $Data::Dumper::Sortkeys = sub {
        my $data = join '', keys %{$_[0]};
        if ($data =~ /[A-Za-z]/) {   # for example
            # input is not numeric
            return [keys %{$_[0]}];
        } else {
            return [ sort { $a <=> $b } keys %{$_[0]} ];
        }
    };
    

    2023-02-13 12:46 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有