Perl:make值%hash记住代码中值的位置

ado*_*ado 0 perl

在Perl中:

 my %members = ( "fools"      => 6,                      
                 "monsters"    => 2,                      
                 "weirdos"       => 1,                      
                 "coders"    => 1,                                        
                 "betrayers"     => 1,   );     
Run Code Online (Sandbox Code Playgroud)

我写的时候:

 my @values_members = values %members;
Run Code Online (Sandbox Code Playgroud)

数组中元素的位置不会是6,2,1,1,1(代码中"出现"的位置).它将是随机的或接近随机的.

我想要一个这样的功能:

 my values_members = get_values_with_position_as_appears_in_code ( %members );
Run Code Online (Sandbox Code Playgroud)

 ( 6, 2, 1, 1, 1 );
Run Code Online (Sandbox Code Playgroud)

这可能吗?

fri*_*edo 5

Perl哈希是无序的,因此没有特别保证您将从哈希中获取内容的顺序.

您可以使用Tie :: IxHash,它将为您提供跟踪其插入顺序的哈希.

use strict;
use warnings;

use Tie::IxHash;

tie my %members, 'Tie::IxHash', ( "fools"      => 6,                      
                                  "monsters"   => 2,                      
                                  "weirdos"    => 1,                      
                                  "coders"     => 1, 
                                  "betrayers"  => 1,   );

my @values = values %members;

print join "\n" @values;
Run Code Online (Sandbox Code Playgroud)

输出:

6
2
1
1
1
Run Code Online (Sandbox Code Playgroud)