2013年10月28日

Perl で連想配列の順序をキープする

Perl の連想配列のキーを keys で取得すると、通常は設定順序と異なる順序で返される。
連想配列の順序を保持したい場合は、Tie::IxHash モジュールを使用する。

Tie::IxHash モジュールには TIEHASH インターフェイスが用意されているので、tie 関数と組み合わせて使えば連想配列をあたかも設定順にデータが格納されるかのように扱うことができる。

以下、サンプルコード:
#!/usr/bin/perl
use strict;
use warnings;
use Tie::IxHash;
tie my %hashval, 'Tie::IxHash';
$hashval{ data1 } = 10;
$hashval{ data2 } = 20;
$hashval{ data3 } = 30;
$hashval{ data4 } = 40;
foreach my $k (keys %hashval) {
print "$k = $hashval{$k}\n";
}
これを実行すると、
$ perl ~/tmp/test2.pl data1 = 10 data2 = 20 data3 = 30 data4 = 40
となる。

ためしに7行目を
my %hashval;
に差し替えてみると
$ perl ~/tmp/test2.pl data4 = 40 data2 = 20 data3 = 30 data1 = 10
のようになり、Tie::IxHash の効果が確認できる。
posted by K/I at 16:43 | 東京 ☀ | Comment(0) | TrackBack(0) | 技術メモ | このブログの読者になる | 更新情報をチェックする