Tie::IxHash

Perl のハッシュはキーの順番が保証されていません。
例えば下記のようなコードの場合、、、

my %hash;
%hash = (
    aaa => 1,
    bbb => 2,
    ccc => 3,
    ddd => 4,
);

for my $i (keys %hash) {
    print $i, "\n";
}

実行結果は下記のようになりました。

bbb
ddd
ccc
aaa

このように定義した順番ではない順番で取り出されます。
というか、毎回順番は変わります。

Tie::IxHash を使うことで定義した順番を保持することができます。
使い方は簡単です。

use Tie::IxHash;

tie my %hash, 'Tie::IxHash';
%hash = (
    aaa => 1,
    bbb => 2,
    ccc => 3,
    ddd => 4,
);


for my $i (keys %hash) {
    print $i, "\n";
}

use して、保持したいハッシュ変数を tie するだけです。
大きなハッシュに対して Tie::IxHash を使うとかなり性能に影響するようなので、そのような場合には注意が必要かもしれません。

コメント

タイトルとURLをコピーしました