免费注册 查看新帖 |

Chinaunix

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

找出所有组合 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-11-21 17:41 |只看该作者 |倒序浏览
本帖最后由 pony2001mx 于 2014-11-21 17:42 编辑

大家好,
我有一个难题,请教高人指点。对于每个ID(第一列),找出所有首尾相连(从1连到100)的组合。非常谢谢您的帮助!!

a   1-30      A
a   9-30      B
a   31-70    D
a   31-100  F
a   71-100  U
b   1-50      J
b   1-90      K
b   51-100   JK
c   1-20      ll
c   21-99     L


理想的输出结果是
a    1-30,31-70,71-100   ADU
a    1-30,31-100            AF
b    1-50, 51-100           JJK

论坛徽章:
0
2 [报告]
发表于 2014-11-22 14:05 |只看该作者
有没有高手帮我一下,我万分感激!是我的问题表述不太清楚吗?我的目的是找出所有首尾相连(从1连到100)的组合,比如1-30,31-70,71-100这个组合。 谢谢!

论坛徽章:
8
技术图书徽章
日期:2013-09-30 08:51:28技术图书徽章
日期:2013-12-11 09:26:39白羊座
日期:2013-12-27 15:27:13金牛座
日期:2014-01-06 09:13:05天蝎座
日期:2014-01-21 14:23:28酉鸡
日期:2014-05-09 16:51:12卯兔
日期:2014-08-11 16:49:1515-16赛季CBA联赛之八一
日期:2017-08-14 23:24:57
3 [报告]
发表于 2014-11-22 23:40 |只看该作者
本帖最后由 xiumu2280 于 2014-11-23 10:34 编辑
  1. use strict;
  2. use warnings;
  3. use Storable qw(dclone);

  4. my @data = map {[$_->[0],[[$_->[1],$_->[2]]],[$_->[3]]]}map {chomp;[split /\s+|-/,$_]}<DATA>;

  5. for my $f (@data) {
  6.         next if $f->[1][0][0] ne 1;
  7.         all_result($f,\@data);
  8. }

  9. sub all_result {
  10.         my ($ori_o,$data) = @_;
  11.         my $ori = dclone($ori_o);
  12.         for my $s (@{$data}) {
  13.                 if ($ori_o->[0] eq $s->[0] && ($ori_o->[1][-1][1]+1) eq $s->[1][0][0]) {
  14.                         push @{$ori->[1]},$s->[1][0];
  15.                         push @{$ori->[2]},@{$s->[2]};
  16.                         all_result($ori,$data);
  17.                         $ori = dclone($ori_o);
  18.                 }
  19.         }
  20.         if ($ori_o->[1][-1][1] eq 100) {
  21.                 my @mm;
  22.                 for my $m (@{$ori_o->[1]}) {
  23.                         push @mm,join "-",@$m;
  24.                 }
  25.                 my $m_l = join ",",@mm;
  26.                 my $e_l = join "",@{$ori_o->[-1]};
  27.                 print "$ori_o->[0]\t$m_l\t$e_l\n";
  28.                 return;
  29.         }
  30. }
  31. __DATA__
  32. a   1-30      A
  33. a   9-30      B
  34. a   31-70    D
  35. a   31-100  F
  36. a   71-100  U
  37. b   1-50      J
  38. b   1-90      K
  39. b   51-100   JK
  40. c   1-20      ll
  41. c   21-99     L
复制代码
写的比较绕,不过应该可以实现

论坛徽章:
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-11-23 11:17 |只看该作者
回复 3# xiumu2280


    大神,dclone是干啥的?

论坛徽章:
1
羊年新春福章
日期:2015-04-28 20:40:58
5 [报告]
发表于 2014-11-23 11:25 |只看该作者
同问~~~~~~

论坛徽章:
8
技术图书徽章
日期:2013-09-30 08:51:28技术图书徽章
日期:2013-12-11 09:26:39白羊座
日期:2013-12-27 15:27:13金牛座
日期:2014-01-06 09:13:05天蝎座
日期:2014-01-21 14:23:28酉鸡
日期:2014-05-09 16:51:12卯兔
日期:2014-08-11 16:49:1515-16赛季CBA联赛之八一
日期:2017-08-14 23:24:57
6 [报告]
发表于 2014-11-23 11:37 |只看该作者
本帖最后由 xiumu2280 于 2014-11-23 11:37 编辑

对引用进行复制 @清泉一边 回复 4# huang6894


   

论坛徽章:
0
7 [报告]
发表于 2014-11-24 09:21 |只看该作者
本帖最后由 pony2001mx 于 2014-11-24 09:21 编辑

xiumu2280,非常谢谢您的perl程序,但是我运行您的脚本为什么不出任何结果?我正在钻研您的脚本,还不太明白next if $f->[1][0][0] ne 1的意思(我觉得next if $f->[1] ne 1容易理解些,后边[0][0]不太明白)。请给我回复,也欢迎大家的建议,谢谢!!

论坛徽章:
8
技术图书徽章
日期:2013-09-30 08:51:28技术图书徽章
日期:2013-12-11 09:26:39白羊座
日期:2013-12-27 15:27:13金牛座
日期:2014-01-06 09:13:05天蝎座
日期:2014-01-21 14:23:28酉鸡
日期:2014-05-09 16:51:12卯兔
日期:2014-08-11 16:49:1515-16赛季CBA联赛之八一
日期:2017-08-14 23:24:57
8 [报告]
发表于 2014-11-24 09:40 |只看该作者
$f是一个3层数组,你用use Data:umper; 看看数据结构就明白了

把代码复制进去会没有结果?
还是你改了之后 才没结果
回复 7# pony2001mx


   

论坛徽章:
0
9 [报告]
发表于 2014-11-24 10:05 |只看该作者
xiumu2280,,可以了,谢谢!我正在研究您的脚本,有问题还要请教您,谢谢!

论坛徽章:
0
10 [报告]
发表于 2014-11-24 18:06 |只看该作者
回复 8# xiumu2280

您好,我研究了半天,请问第20行$ori = dclone($ori_o);是不是可以省略?谢谢!
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP