tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

【perl】grep、mapでいろいろやる(配列からkey=>1のhashに変換、リストからユニークな値の取得、2つの配列をマッピングしてhashに変換)

はじめに

以前、perlのリスト(配列)の基本について書きました。(hashについては書いてないかも)

上記の記事とはあまり関係ないですし今更間はありますが、
今回はリストとhashの使い方(主にgrepやmap)についてメモ

参考

こちらも参考に

あじぇんだ

  1. 配列からkey=>1のhashに変換(map)
  2. リストからユニークな値の取得①(grep)
  3. リストからユニークな値の取得②(map)
  4. 2つの配列をマッピングしてhashに変換(map)

1. 配列からkey=>1のhashに変換(map)

ソース
my @array = qw/hoge foga piyo/;
my %hash  = map { $_ => 1 } @array;
say Dumper \%hash;
結果
# perl grep_map_sample.pl
$VAR1 = {
          'piyo' => 1,
          'foga' => 1,
          'hoge' => 1
        };

2. リストからユニークな値の取得①(grep)

ソース
my @array = qw/hoge foga piyo hoge hoge muga/;
my %tmp;
my @unique = grep { !$tmp{$_}++ } @array;
say Dumper \@unique;
結果
$VAR1 = [
          'hoge',
          'foga',
          'piyo',
          'muga'
        ];

3. リストからユニークな値の取得②(map)

ソース
my @array = qw/hoge foga piyo hoge hoge muga/;
my @unique = keys{map { $_ => 1 } @array};
say Dumper \@unique;
結果
$VAR1 = [
          'piyo',
          'muga',
          'hoge',
          'foga'
        ];

4. 2つの配列をマッピングしてhashに変換(map)

これはハッシュスライス使ってやることもできますが、mapでやります。

ソース
my @keys = ("name", "age", "sex");
my @values = ("hoge", 20, 1);
my %hash = map { $keys[$_] => $values[$_] } (0..$#keys);
warn Dumper \%hash;
結果
$VAR1 = {
          'name' => 'hoge',
          'age' => 20,
          'sex' => 1
        };

まとめ

perlのハッシュやリストは使い方によって結構すっきりかけるところがいいですよね!

初めてのPerl 第6版
初めてのPerl 第6版
posted with amazlet at 14.09.15
Randal L. Schwartz brian d foy Tom Phoenix
オライリージャパン
売り上げランキング: 23,310