免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3307 | 回复: 7

如何简洁的将哈希值互换 [复制链接]

论坛徽章:
0
发表于 2011-02-12 16:41 |显示全部楼层

  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 的值

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2011-02-12 16:49 |显示全部楼层
本帖最后由 flw 于 2011-02-12 17:11 编辑
  1. my %d = map {
  2.         $b{$_} => [
  3.             map { $c{$_} } @{ $a{$_} }
  4.         ]
  5. } keys %a;
复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2011-02-12 16:54 |显示全部楼层
本帖最后由 flw 于 2011-02-12 17:12 编辑

写成一行就是这样:

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

紧凑版:

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

论坛徽章:
0
发表于 2011-02-12 16:58 |显示全部楼层
flw 发表于 2011-02-12 16:49



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

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2011-02-12 17:08 |显示全部楼层
这个机会还是留给别人吧。也建议你自己通过学习把它搞懂。

论坛徽章:
0
发表于 2011-02-12 18:36 |显示全部楼层
回复 4# ztj2247


    对于 keys@a中的每个元素,做一下两个运算 一个是:$b{$_}  另一个 是那个数组的替换: 数组计算也是通过map计算的。

map{ $c{$_} } @{ $a{$_}

论坛徽章:
0
发表于 2011-02-13 17:40 |显示全部楼层
本帖最后由 iLRainyday 于 2011-02-13 17:53 编辑

就是连续两次mapping,如果flw大那个fat comma看起来不习惯的话,换成这样再看看:
  1. my %d = map { $b{$_}, [ map { $c{$_} } @{$a{$_}} ] } keys %a;  
复制代码
需要注意的是,内部的map中,两个$_实际上表示的是不同的变量,尽管名字是相同的。


PS. hash是用括号,不是用大括号,你写错了~

论坛徽章:
0
发表于 2016-09-27 23:25 |显示全部楼层
回复 2# flw
请教大神@{ $a{$_} }怎么理解?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP