次のハッシュがあり、設定した順序で保持したいと考えています。これは可能ですか?そうでない場合、代替手段はありますか?
my %hash = ('Key1' => 'Value1', 'Key2' => 'Value2', 'Key3' => 'Value3');
カスタムの並べ替えサブルーチンを作成する必要がありますか? 私のオプションは何ですか?
ありがとうございました!
http://metacpan.org/pod/Tie::IxHash
use Tie::IxHash;
my %hash;
tie %hash,'Tie::IxHash';
このハッシュはその順序を維持します。
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'
これをやってみてください:
print "$_=$hash{$_}\n" for sort keys %hash;
アルファベット順にソートしたい場合。
元の順序を保持する必要がある場合は、他の投稿を参照してください。
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 )};
これは、データにアクセスする方法によって異なります。それらを格納して最後/最初の値にアクセスしたいだけの場合は、いつでもハッシュを配列に入れて、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);