gpt4 book ai didi

perl - HoH的第一级键上的Perl Data::Dumper数字排序

转载 作者:行者123 更新时间:2023-12-04 06:24:32 25 4
gpt4 key购买 nike

我有一个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”不是)正确的方法,但我似乎一辈子都无法弄清楚如何对第一个哈希进行排序btw-当我通过普通的foreach循环使用以下命令发送HoH时:

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


它会按预期工作。

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

最佳答案

$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]} ];
}
};

关于perl - HoH的第一级键上的Perl Data::Dumper数字排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20339623/

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