使用 Dumper 对 Perl 中的哈希值进行排序

Mik*_*ike 0 sorting perl hash dump

我有一个像这样的哈希值的哈希值:

%hash = {
    car => {
        '10' => 'y',
        '11' => 'y',
        '12' => 'y',
        '13' => 'y'
    },
    bus => {
        '10' => 'y',
        '11' => 'y',
        '12' => 'y',
        '13' => 'y'
    },
    tr => {
        '10' => 'y',
        '11' => 'y',
        '12' => 'y',
        '13' => 'y'
    }
}
Run Code Online (Sandbox Code Playgroud)

我如何在 PERL 中打印这个哈希值(使用 Dumper),其中每个部分的键按上述顺序排序(10,11,12,13,14...)?

提前致谢,

三木

Сух*_*й27 5

你可以试试

use Data::Dumper;
local $Data::Dumper::Sortkeys = 1;
# using custom sort function
# local $Data::Dumper::Sortkeys = sub { [ sort keys %{+shift} ] };

print Dumper {
    car => {
        '10' => 'y',
        '11' => 'y',
        '12' => 'y',
        '13' => 'y'
    },
    bus => {
        '10' => 'y',
        '11' => 'y',
        '12' => 'y',
        '13' => 'y'
    },
    tr => {
        '10' => 'y',
        '11' => 'y',
        '12' => 'y',
        '13' => 'y'
    }
}
Run Code Online (Sandbox Code Playgroud)

输出

$VAR1 = {
      'bus' => {
                 '10' => 'y',
                 '11' => 'y',
                 '12' => 'y',
                 '13' => 'y'
               },
      'car' => {
                 '10' => 'y',
                 '11' => 'y',
                 '12' => 'y',
                 '13' => 'y'
               },
      'tr' => {
                '10' => 'y',
                '11' => 'y',
                '12' => 'y',
                '13' => 'y'
              }
    };
Run Code Online (Sandbox Code Playgroud)

来自perldoc Data::Dumper

$Data::Dumper::Sortkeys

可以设置为布尔值来控制哈希键是否按排序顺序转储。true 值将导致所有散列的键按照 Perl 的默认排序顺序转储。还可以设置为子例程引用,该子例程引用将为每个转储的哈希调用。在这种情况下,Data::Dumper 将为每个哈希调用一次子例程,并将哈希的引用传递给它。该子例程的目的是按照应转储的顺序返回对将转储的键数组的引用。使用此功能,您可以控制按键的顺序以及实际使用的按键。换句话说,该子例程充当过滤器,您可以通过它排除某些键的转储。默认值为 0,这意味着哈希键不排序。