免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5306 | 回复: 14

多重散列(哈希)嵌套 出问题,求解答 [复制链接]

论坛徽章:
0
发表于 2013-10-08 16:16 |显示全部楼层
#!usr/bin/perl

%HoH = (

  "$flintstones[1]"=> {

       "$husband[1]" => [fred,1,222,3],
        "$wife[1]" => [barney,1,2,3555],
    },

  "$flintstones[2]"=> {

       "$husband[2]" => [ge22e,dd222,ff333,ff444],
        "$wife[2]" => [george22,ff222,yy333,yy444],

     },
   "$flintstones[3]"=>  {

       "$husband[3]" => [tgeorgett,t222,t333,t444],
        "$wife[3]" => [tgeorge,t222,t333,t444],

     },
  );



for($ii=0;$ii<=3;$ii++){

    for($jj=1;$jj<=3;$jj++){

          for($kk=1;$kk<=3;$kk++){

       foreach $key ("$flintstones[$kk]") {


print $HoH{$flintstones[$kk]}->{$husband[$jj]}->[$ii],"\n";
                    }            
    };
        };
             }


想通过三重循环 让print打印出%HoH的每个husband的值,但打印的结果为什么只打印第二
个wife的值:
george22
......
ff222
.....
yy333
......
yy444
......

为什么会是这样?

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
发表于 2013-10-08 16:40 |显示全部楼层
这代码,你能开use strict 吗{:3_183:}

论坛徽章:
0
发表于 2013-10-08 16:48 |显示全部楼层
回复 2# mcshell

不行啊,我把书上的例题按自己需要修改了下,但不知道哪个地方有问题。忘各位大侠指点下!
   

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
发表于 2013-10-08 17:23 |显示全部楼层
写这代码啊,
通常,建议大侠要好好回去···回过头去再看看 数组ARRAY

论坛徽章:
6
丑牛
日期:2014-03-21 15:42:04子鼠
日期:2014-04-12 11:50:17处女座
日期:2014-09-01 09:25:1115-16赛季CBA联赛之吉林
日期:2015-12-22 14:01:5215-16赛季CBA联赛之广东
日期:2016-03-08 18:49:422016科比退役纪念章
日期:2016-07-06 12:19:55
发表于 2013-10-08 17:25 |显示全部楼层
本帖最后由 stanley_tam 于 2013-10-08 17:28 编辑

那个。。。没有用keys看着就这么变扭。貌似for略多,数组没有赋值,改了一下,你试试

  1. @flintstones = qw{flintstone0 flintstones1 flintstones2 flintstones3};
  2. @husband = qw{husband0 husband1 husband2 husband3};
  3. @wife = qw{wife0 wife1 wife2 wife3};

  4. %HoH = (

  5.     "$flintstones[1]" => {

  6.         "$husband[1]" => [ fred,   1, 222, 3 ],
  7.         "$wife[1]"    => [ barney, 1, 2,   3555 ],
  8.     },

  9.     "$flintstones[2]" => {

  10.         "$husband[2]" => [ ge22e,    dd222, ff333, ff444 ],
  11.         "$wife[2]"    => [ george22, ff222, yy333, yy444 ],

  12.     },
  13.     "$flintstones[3]" => {

  14.         "$husband[3]" => [ tgeorgett, t222, t333, t444 ],
  15.         "$wife[3]"    => [ tgeorge,   t222, t333, t444 ],

  16.     },
  17. );


  18. for ( $ii = 1 ; $ii <= 3 ; $ii++ ) {

  19.     # for ( $jj = 1 ; $jj <= 3 ; $jj++ ) {

  20.         for ( $kk = 0 ; $kk <= 3 ; $kk++ ) {

  21.             # foreach $key ("$flintstones[$kk]") {
  22.                 # print $HoH{ $flintstones[$kk] }->{ $husband[$jj] }->[$ii], "\n";
  23.                 print $HoH{ $flintstones[$ii] }->{ $husband[$ii] }->[$kk], "\n";
  24.             # }
  25.         }
  26.         print "\n";
  27.     # }
  28. }
复制代码
回复 1# fjndhjf


   

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
发表于 2013-10-08 20:22 |显示全部楼层
  [ tgeorge,   t222, t333, t444 ]

这是语法错误吧

论坛徽章:
6
丑牛
日期:2014-03-21 15:42:04子鼠
日期:2014-04-12 11:50:17处女座
日期:2014-09-01 09:25:1115-16赛季CBA联赛之吉林
日期:2015-12-22 14:01:5215-16赛季CBA联赛之广东
日期:2016-03-08 18:49:422016科比退役纪念章
日期:2016-07-06 12:19:55
发表于 2013-10-08 20:32 |显示全部楼层
没有use strict,perl能识别{:3_196:} 回复 6# 104359176


   

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
发表于 2013-10-08 20:41 |显示全部楼层
当你还不能熟练是用hash和array时, use Data:umper, 可以一目了然

论坛徽章:
0
发表于 2013-10-08 21:37 |显示全部楼层
回复 5# stanley_tam


    多谢了,确实是数组没有能像 想象中的被赋值。如果这样赋值的话,
@flintstones = qw{flintstone0 flintstones1 flintstones2 flintstones3};
当@flintstones的元素个数发生动态变化(不一定是4个时),
就要同时修改%H0H和@flintstones=qw{ ...}这两个地方,有其他写法能在
%H0H()内顺便给@flintstones,@husband,@wife赋值吗?

论坛徽章:
6
丑牛
日期:2014-03-21 15:42:04子鼠
日期:2014-04-12 11:50:17处女座
日期:2014-09-01 09:25:1115-16赛季CBA联赛之吉林
日期:2015-12-22 14:01:5215-16赛季CBA联赛之广东
日期:2016-03-08 18:49:422016科比退役纪念章
日期:2016-07-06 12:19:55
发表于 2013-10-08 21:49 |显示全部楼层
这种要求都有。。。{:3_188:}
试试:
  1. #!perl

  2. %HoH = (

  3.     assignment => "
  4.         @{[@flintstones = qw{flintstone0 flintstones1 flintstones2 flintstones3}]}
  5.         @{[@husband = qw{husband0 husband1 husband2 husband3}]}
  6.         @{[@wife = qw{wife0 wife1 wife2 wife3}]}
  7.         ",

  8.     "$flintstones[1]" => {

  9.         "$husband[1]" => [ fred,   1, 222, 3 ],
  10.         "$wife[1]"    => [ barney, 1, 2,   3555 ],
  11.     },

  12.     "$flintstones[2]" => {

  13.         "$husband[2]" => [ ge22e,    dd222, ff333, ff444 ],
  14.         "$wife[2]"    => [ george22, ff222, yy333, yy444 ],

  15.     },
  16.     "$flintstones[3]" => {

  17.         "$husband[3]" => [ tgeorgett, t222, t333, t444 ],
  18.         "$wife[3]"    => [ tgeorge,   t222, t333, t444 ],

  19.     },
  20. );


  21. for ( $ii = 1 ; $ii <= 3 ; $ii++ ) {

  22.     # for ( $jj = 1 ; $jj <= 3 ; $jj++ ) {

  23.         for ( $kk = 0 ; $kk <= 3 ; $kk++ ) {

  24.             # foreach $key ("$flintstones[$kk]") {
  25.                 # print $HoH{ $flintstones[$kk] }->{ $husband[$jj] }->[$ii], "\n";
  26.                 print $HoH{ $flintstones[$ii] }->{ $husband[$ii] }->[$kk], "\n";
  27.             # }
  28.         }
  29.         print "\n";
  30.     # }
  31. }
复制代码
回复 9# fjndhjf


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会

【架构革新 高效可控】2020年12月21日-23日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP