免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4019 | 回复: 9
打印 上一主题 下一主题

键值循环替换问题? [复制链接]

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-10-21 13:02 |只看该作者 |倒序浏览
30可用积分
想请教一下:对于下面这些文本:

  1. HP:0000002      HP:0000098
  2. HP:0000002;HP:0001510   HP:0004322
  3. HP:0000098;HP:0000022;HP:0010002      HP:0001510
  4. HP:0000098      HP:0004322
  5. HP:0000022;HP:0010002     HP:0001511
复制代码
右边是左边的子类,右边只可能有一个,但可以在多行出现“父亲”可以有多个,且“父亲”之间可能有“父子”关系,用分号隔开;
现在要找他们的“直系亲属”,也就是“父子”之间只有一级关联的;
处理后:

  1. HP:0000002    <=>    HP:0000098;
  2. HP:0000098    <=>    HP:0004322;HP:0001510;   #因为HP:0001510、HP:0004322的父亲是HP:0000098和HP:0000002,但是因为HP:0000002是HP:0000098的父亲,所以HP:0004322只能作为HP:0000002的孙子了
  3. HP:0001510    <=>    HP:0004322;
  4. HP:0000022    <=>    HP:0001510;HP:0001511;
  5. HP:0010002    <=>    HP:0001510;HP:0001511;
复制代码

最佳答案

查看完整内容

{:2_167:}{:2_168:} 0000098 1: 0001510 => real2: 0004322 => fake: => 0001510's 子回复 3# huang6894

论坛徽章:
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
2 [报告]
发表于 2014-10-21 13:02 |只看该作者
{:2_167:}
  1. HP:0000098    <=>    HP:0004322;HP:0001510
复制代码
{:2_168:}
0000098
1: 0001510 => real
2: 0004322 => fake: => 0001510's 子
  1. HP:0000022 <=> HP:0001510, HP:0001511
  2. HP:0001510 <=> HP:0004322
  3. HP:0000098 <=> HP:0001510
  4. HP:0000002 <=> HP:0000098
  5. HP:0010002 <=> HP:0001511, HP:0001510
复制代码
  1. my %family;

  2. while (<DATA>) {
  3.     my @person = split /;|\s+/;
  4.     my $son    = pop @person;
  5.    
  6.     $family{$_}{$son} = 1 for @person;
  7. }

  8. for my $person ( keys %family ) {
  9.     my ( @maybe, @sons ) = keys %{ $family{$person} };
  10.    
  11.   try: for my $son (@maybe) {
  12.         exists $family{$_}{$son} and next try for @maybe;
  13.         push @sons, $son;
  14.     }
  15.    
  16.     say "$person <=> ", join ', ', @sons;
  17. }
  18.    

  19. __DATA__
  20. HP:0000002      HP:0000098
  21. HP:0000002;HP:0001510   HP:0004322
  22. HP:0000098;HP:0000022;HP:0010002      HP:0001510
  23. HP:0000098      HP:0004322
  24. HP:0000022;HP:0010002     HP:0001511
复制代码
回复 3# huang6894


   

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
3 [报告]
发表于 2014-10-21 15:17 |只看该作者
回复 1# huang6894

Hash + Array
   

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
4 [报告]
发表于 2014-10-21 15:26 |只看该作者
回复 2# jason680


    谢谢,我在努力尝试中。。。

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
5 [报告]
发表于 2014-10-21 17:00 |只看该作者
回复 1# pitonas


    好久不见啊~谢谢大神给了我一个很好的参考

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
6 [报告]
发表于 2014-10-21 20:52 |只看该作者
回复 2# pitonas


    越看越觉得厉害啊

论坛徽章:
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
7 [报告]
发表于 2014-10-22 13:13 |只看该作者
本帖最后由 pitonas 于 2014-10-22 06:14 编辑


乍看之下,觉得厉害不无道理;仔细揣摩,我发现这个代码太悲催了
我的答案不靠谱,基本不对 ~ {:2_172:}
__DATA__
A     B
B;C;D E
B     C
B;E   F
C;G   I
I;J;B K


但是基本不对 ~ {:2_168:}

J <=> K
G <=> I
E <=> F
I <=> K
C <=> I, E
D <=> E
A <=> B
B <=> C, K

{:2_169:}


A     B
B;C;D E
B     C
B;E   F
C;G   I
I;J;B K

B:
1: E  fake: son of C
2: C  real
3: F  fake: son of E
4: K  fake: (K: son of I) => (I: son of C)



回复 6# huang6894


   

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
8 [报告]
发表于 2014-10-22 13:36 |只看该作者
回复 7# pitonas


    我确实没考虑曾祖父一辈的情况。。。

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
9 [报告]
发表于 2014-10-23 09:11 |只看该作者
回复 7# pitonas


    大神,我怎么做可以对他们的等级进行标注呢?

__DATA__
A     B
B;C;D E                                      
B     C
B;E   F
C;G   I
I;J;B K
C  J

标注为:

A : A->B->C->I;J->K;
D: D->E->F;
G:G->I->K;
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP