$my_ref = \$hash{'mary'};
#my_ref
はハッシュ要素への参照点であると仮定します。
....後で、それが指すハッシュ要素のキーを取得するため
にどのように使用できますか?$my_ref
つまり、文字列'mary'を$my_ref
?から取得する方法
ユーザー名リストのグループがいくつかあるので、この質問をします。一部のユーザー名は、メモリを消費する複数のグループに表示されます。そこで、共通のユーザー名リストを作成し、これらのグループに、ユーザー名ではなく、対応するユーザー名への参照のみを格納させることにしました。
例:元々、
%group1 = {'mary'=>1, 'luke'=1,'tom'=1,...}
%group2 = {'mary'=>1, 'sam'=1,'tom'=1,...}
ここでは、「mary」と「tom」が両方に表示され、group1
メモリgroup2
を消費していることがわかります。(この例では値を気にしないことに注意してください。データ構造体がハッシュであるため、値はここにあります)。したがって、メモリを削減するために、すべてのユーザー名を共通のリストに格納する必要があります。
%common_hash = {'mary'=>1, 'luke'=1,'tom'=1,'sam'=1...};
$ref1 = \$common_hash{'mary'};
$ref2 = \$common_hash{'luke'};
$ref3 = \$common_hash{'tom'};
$ref4 = \$common_hash{'sam'};
グループは、ハッシュ要素の参照のみを格納します。
%group1 = {$ref1=>1, $ref2=1,$ref3=1,...};
%group2 = {$ref1=>1, $ref4=1,$ref3=1,...};
このアプローチは、次の理由で多くのメモリを節約できると思います。
- 1つのユーザー名が複数回ではなく1回メモリに保存されます。
- groupsは、文字列ではなく参照(整数)を格納します(私の場合、各ユーザー名の長さは平均30バイトですが、各整数は4バイト(32ビットシステム)または8バイト(64ビットシステム)のみです) (ところで、整数が4バイトまたは8バイトを使用しない場合は修正してください。)
- 参照を使用すると、ユーザー名を探すことなくすぐにアクセスできます。
しかし、どうすればグループからユーザー名を取得できますか?
を使用する@my_ref = keys %group1
と、「mary」の値は取得されますが、「mary」の値は取得されないと思います。
$result = $($my_ref[0]);