キーの設定順を保持してないので、例えば以下のコードを
実行すると、
#!/usr/bin/perl
my %tmp = ();
for (my $i=0; $i<100; $i++) {
$tmp{$i} = $i+1;
}
foreach my $key (keys %tmp) {
print "$key, $tmp{$key}\n";
}
exit;
■出力
6, 7
3, 4
7, 8
9, 10
2, 3
8, 9
1, 2
4, 5
0, 1
5, 6
と、バラバラな順序になってしまいます。
なのでメモリの無駄だなーとは思いつつ、キーだけ格納する
配列を別途用意したりしてましたが、そんなことをしなくても
良い方法があることを知りました。
それはTie::IxHashモジュールを使う方法です。
残念ながらMacのPerl v5.16.2環境では標準で入ってなかった
のですが、以下のコマンドでインストールできます。
sudo cpan
install Tie::IxHash
で、以下のようなコードで実行すると、
#!/usr/bin/perl
use Tie::IxHash;
my %tmp = ();
tie %tmp, 'Tie::IxHash';
for (my $i=0; $i<10; $i++) {
$tmp{$i} = $i+1;
}
foreach my $key (keys %tmp) {
print "$key, $tmp{$key}\n";
}
exit;
■出力
3, 4
7, 8
9, 10
2, 3
8, 9
1, 2
4, 5
0, 1
5, 6
と、バラバラな順序になってしまいます。
なのでメモリの無駄だなーとは思いつつ、キーだけ格納する
配列を別途用意したりしてましたが、そんなことをしなくても
良い方法があることを知りました。
それはTie::IxHashモジュールを使う方法です。
残念ながらMacのPerl v5.16.2環境では標準で入ってなかった
のですが、以下のコマンドでインストールできます。
sudo cpan
install Tie::IxHash
で、以下のようなコードで実行すると、
#!/usr/bin/perl
use Tie::IxHash;
my %tmp = ();
tie %tmp, 'Tie::IxHash';
for (my $i=0; $i<10; $i++) {
$tmp{$i} = $i+1;
}
foreach my $key (keys %tmp) {
print "$key, $tmp{$key}\n";
}
exit;
■出力
0, 1
1, 2
2, 3
3, 4
4, 5
5, 6
6, 7
7, 8
8, 9
9, 10
と、格納順で出力できます。
モジュールを追加しないといけないので、場合によっては
使えないかもしれませんが、なかなか良さげですね。
1, 2
2, 3
3, 4
4, 5
5, 6
6, 7
7, 8
8, 9
9, 10
と、格納順で出力できます。
モジュールを追加しないといけないので、場合によっては
使えないかもしれませんが、なかなか良さげですね。
0 件のコメント:
コメントを投稿