はじめに
以前、perlのリスト(配列)の基本について書きました。(hashについては書いてないかも)
上記の記事とはあまり関係ないですし今更間はありますが、
今回はhash(ハッシュスライス)の使い方についてメモ
参考
こちらも参考に
あじぇんだ
- ハッシュスライス基本①
- ハッシュスライス基本②
- ハッシュスライスでDBレコード的なヤツから任意のkey=>valueに変換する
- ハッシュスライスで2つの配列をマッピングしてhashに変換する
1. ハッシュスライス基本①
ソース
my %hash = ( 'name' => 'hoge', 'age' => 20, 'sex' => 1 ); my @keys = ('name', 'age'); # 'name'と'age'についての値をリストで取得 my @values = @hash{@keys}; say @values;
結果
# perl hash_slice_sample.pl hoge 20
2. ハッシュスライス基本②
先ほどは取得するためにmy @keys = ('name', 'age');
を宣言して
@hash{@keys};
としましたが、当然qw演算子でもいけます。
ソース
my %hash = ( 'name' => 'hoge', 'age' => 20, 'sex' => 1 ); my @values = @hash{qw/name age/}; say "@values";
結果
# perl hash_slice_sample.pl hoge 20
こっちのほうがソースがすっきりしますね
3. ハッシュスライスでDBレコード的なヤツから任意のkey=>valueに変換する
ソース
my @members = ( {'name' => 'hoge', 'age' => 20, 'sex' => 1}, {'name' => 'fuga', 'age' => 30, 'sex' => 1}, {'name' => 'piyo', 'age' => 40, 'sex' => 2}, ); my %members_age = map { @{$_}{ qw/name age/ } } @members; warn Dumper \%members_age;
結果
# perl hash_slice_sample.pl $VAR1 = { 'piyo' => 40, 'hoge' => 20, 'fuga' => 30 };
解説
解説するほどでもないですが一応。
map内の@{$_}{ qw/name age/ }
の部分がハッシュスライスです。
イメージ
# 1レコード目のhashがデフォルト変数`$_`に格納される $_ = {'name' => 'hoge', 'age' => 20, 'sex' => 1} ↓ # 格納されたhashに対してハッシュスライス。 @{$_}{ qw/name age/ } ↓ # ハッシュスライスされると`'hoge' => '20'`が左辺のhashに格納される。 my %members_age = map { @{$_}{ qw/name age/ } } @members;
4. ハッシュスライスで2つの配列をマッピングしてhashに変換する
こちらはソースみたほうが早いと思うので、さっそく。
ソース
my @keys = ("name", "age", "sex"); my @values = ("hoge", 20, 1); my %hash; @hash{@keys} = @values; say Dumper\%hash;
結果
# perl hash_slice_sample.pl $VAR1 = { 'name' => 'hoge', 'sex' => 1, 'age' => 20 };
まとめ
タイプも減るし慣れるとわかりやすいのでイイですよね。ハッシュスライス
初めてのPerl 第6版
posted with amazlet at 14.09.15