4

次のハッシュがあり、設定した順序で保持したいと考えています。これは可能ですか?そうでない場合、代替手段はありますか?

my %hash = ('Key1' => 'Value1', 'Key2' => 'Value2', 'Key3' => 'Value3');

カスタムの並べ替えサブルーチンを作成する必要がありますか? 私のオプションは何ですか?

ありがとうございました!

4

5 に答える 5

8

http://metacpan.org/pod/Tie::IxHash

use Tie::IxHash;
my %hash;
tie %hash,'Tie::IxHash';

このハッシュはその順序を維持します。

于 2012-11-08T01:41:12.497 に答える
2

Tie::Hash::Indexedを参照してください。そのあらすじを引用:

use Tie::Hash::Indexed;

tie my %hash, 'Tie::Hash::Indexed';

%hash = ( I => 1, n => 2, d => 3, e => 4 );
$hash{x} = 5;

print keys %hash, "\n";    # prints 'Index'
print values %hash, "\n";  # prints '12345'
于 2012-11-08T01:43:26.887 に答える
1

これをやってみてください:

print "$_=$hash{$_}\n" for sort keys %hash;

アルファベット順にソートしたい場合。

元の順序を保持する必要がある場合は、他の投稿を参照してください。

http://perldoc.perl.org/functions/sort.htmlを参照してください。

于 2012-11-08T01:40:01.620 に答える
1

1 つの可能性は、配列で時々行うのと同じことを行うことです: キーを指定します。

 for (0..$#a) {  # Sorted array keys
     say $a[$_];
 }

 for (sort keys %h) {  # Sorted hash keys
     say $h{$_};
 }

 for (0, 1, 3) {  # Sorted array keys
     say $h{$_};
 }

 for (qw( Key1 Key2 Key3 )) {  # Sorted hash keys
     say $h{$_};
 }

次のように、順序付けされた値をフェッチすることもできます。

 my @values = @h{qw( Key1 Key2 Key3 )};
于 2012-11-08T01:57:22.480 に答える
0

これは、データにアクセスする方法によって異なります。それらを格納して最後/最初の値にアクセスしたいだけの場合は、いつでもハッシュを配列に入れて、push()とpop()を使用できます。

#!/usr/bin/env perl

use strict;
use warnings;

use v5.10;

use Data::Dumper;

my @hashes;

foreach( 1..5 ){
    push @hashes, { "key $_" => "foo" };
}


say Dumper(\@hashes);
于 2012-11-14T11:05:35.853 に答える