+ -
当前位置:首页 → 问答吧 → 如何简洁的将哈希值互换

如何简洁的将哈希值互换

时间:2011-02-12

来源:互联网

  1. %a=
  2. {
  3.       ab => [ aa,bb,cc,dd ],
  4.       cd  => [ bb,dd,cc],
  5.       df  => [ cc,aa,ee],
  6. }

  7. %b =
  8. {
  9.      ab => "173",
  10.      cd => "174",
  11.      df => "175",
  12. }

  13. %c =
  14. {
  15.      aa => "1",
  16.      bb => "2",
  17.      cc => "3",
  18.      dd => "4",
  19.      ee => "5",
  20. }
  21. //我想让%a 根据 %b 和 %c 的KEY/VALUE值 转化为以下格式
  22. %d =
  23. {
  24.       173=> [ 1,2,3,4 ],
  25.       174  => [ 2,4,3],
  26.       175  => [ 3,1,5],
  27. }
复制代码
求用最简便的方式 替换%a 的值

作者: ztj2247   发布时间: 2011-02-12

本帖最后由 flw 于 2011-02-12 17:11 编辑
  1. my %d = map {
  2.         $b{$_} => [
  3.             map { $c{$_} } @{ $a{$_} }
  4.         ]
  5. } keys %a;
复制代码

作者: flw   发布时间: 2011-02-12

本帖最后由 flw 于 2011-02-12 17:12 编辑

写成一行就是这样:

my %d = map { $b{$_} => [ map { $c{$_} } @{ $a{$_} } ] } keys %a;

紧凑版:

my %d = map {$b{$_}=>[map{$c{$_}}@{$a{$_}}]} keys %a;

作者: flw   发布时间: 2011-02-12



QUOTE:
flw 发表于 2011-02-12 16:49




    很好用 能不能详细解析一下

作者: ztj2247   发布时间: 2011-02-12

这个机会还是留给别人吧。也建议你自己通过学习把它搞懂。

作者: flw   发布时间: 2011-02-12