免费注册 查看新帖 |

Chinaunix

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

求助,perl [复制链接]

论坛徽章:
2
15-16赛季CBA联赛之山西
日期:2016-03-03 17:51:32CU十四周年纪念徽章
日期:2016-03-21 18:45:39
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-07-31 21:51 |只看该作者 |倒序浏览
怎么写一个perl程序  一个数组有多行,让这些有共同的元素的行合并起来,没有共同元素的行正常输出呢?
例如:把这个数组
A B C
C A B D
D F
E Z
G K
K M
KK CC
M P
合并成
A B C D F
E Z
G K M P
KK CC

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
2 [报告]
发表于 2015-08-01 05:02 |只看该作者
本帖最后由 rubyish 于 2015-08-01 02:04 编辑

shishi:
  1. #!/usr/bin/perl
  2. use 5.022;
  3. my %that = map { my $h; @$h{ (split) } = (); $a++, $h } <DATA>;

  4. while ( my ( undef, $it ) = each %that ) {
  5.     my ( %true, %this ) = %$it;
  6.     while (%true) {
  7.         my @key = grep !exists $this {$_}, keys %true;
  8.         @this {@key} = ();
  9.         undef %true;
  10.         for my $key (@key) {
  11.             for my $elem ( keys %that ) {
  12.                 next unless exists $that {$elem} {$key};
  13.                 @true { keys %{ $that {$elem} } } = ();
  14.                 delete $that {$elem}
  15.     }}}
  16.     say join $", sort keys %this;
  17. }

  18. __DATA__
  19. A        B        C      
  20. C        A        B        D
  21. D        F               
  22. E        Z               
  23. G        K               
  24. K        M               
  25. KK        CC               
  26. M        P     
复制代码

论坛徽章:
0
3 [报告]
发表于 2015-08-01 09:46 |只看该作者
回复 2# rubyish
  1. my %that = map { my $h; @$h{ (split) } = (); $a++, $h } <DATA>;
复制代码
这一句什么意思啊

   

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
4 [报告]
发表于 2015-08-01 14:05 |只看该作者
回复 2# rubyish


    终于不见你写只有几行的程序了,那我来一个吧,^_^

  1. use v5.14;
  2. no warnings qw(experimental::autoderef);

  3. while (<>) {
  4.     chomp;
  5.     $b = { map { $_ => 1 } split };
  6.     $a = $_, map { $a = $_, (map { $a->{$_}++ } keys $b), undef %$b if $_->{$a} } @_ for keys $b;
  7.     push @_, $b if %$b;
  8. }

  9. say "@{[ sort keys $_ ]}" for @_;
复制代码

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
5 [报告]
发表于 2015-08-01 14:10 |只看该作者
回复 2# rubyish


    感觉你这个程序写的不在状态呀……

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
6 [报告]
发表于 2015-08-01 23:54 |只看该作者
回复 3# 莫莫小米

shi:
  1. #!/usr/bin/perl
  2. use 5.022;

  3. # my %hash = map { my $h; @$h{ (split) } = (); $a++, $h } <DATA>;
  4. # my %hash = map { $a++ => { map { $_ => undef } split } } <DATA>;
  5. # EQ

  6. my %hash = map {
  7.     my $h    = {};
  8.     my @keys = split;
  9.     @{$h}{@keys} = ();
  10.    
  11.     # EQ
  12.     # $h->{$_} = undef for @keys;
  13.    
  14.     $a++ => $h    # key => Val
  15.     # EQ:
  16.     # $a++, $h
  17. } <DATA>;


  18. # %hash =
  19. # ( 2 => { O => undef, R => undef },
  20. #   0 => { I => undef, J => undef },
  21. #   1 => { O => undef, W => undef },
  22. #   3 => { J => undef, R => undef, A => undef } )

  23. __DATA__
  24. I   J
  25. O   W
  26. O   R
  27. R   J   A
复制代码

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
7 [报告]
发表于 2015-08-02 00:17 |只看该作者
回复 5# MMMIX
     感觉你这个程序写的不在状态呀……


zhege timu, wo zhihui 2 zhong xiefa.
fangfa 1:

13 hang:
  1. sub S {
  2.     ( $a, $b ) = @_;
  3.     exists $b->{$a} ? return : $b->{$a}++;
  4.     S( $_, $b ) for keys %{ $_{$a} };
  5.     sort keys %$b;
  6. }

  7. while (<DATA>) {
  8.     @{ $_{$_} }{@_} = () for @_ = split;
  9. }

  10. while ( $a = each %_ ) {
  11.     say join $", @_ = S $a;
  12.     delete @_{@_};
  13. }
复制代码
nongsuo 7 hang:
  1. sub S {
  2.     ( $a, $b ) = @_;
  3.     $b->{$a}++ ? return : map S( $_, $b ), keys %{ $_{$a} };
  4.     delete @_{ @_ = sort keys %$b } or @_;
  5. }

  6. map @{ $_{$_} }{@_} = (), @_ = split for <DATA>;
  7. say join $", S$a while $a = each %_;
复制代码

论坛徽章:
12
2015年亚洲杯之乌兹别克斯坦
日期:2015-04-10 18:29:00狮子座
日期:2016-01-17 15:40:28处女座
日期:2016-01-16 17:36:17巨蟹座
日期:2016-01-16 17:35:48未羊
日期:2015-12-12 16:18:26青铜圣斗士
日期:2015-12-09 01:07:50IT运维版块每日发帖之星
日期:2015-12-05 06:20:00神斗士
日期:2015-12-03 23:13:59IT运维版块每日发帖之星
日期:2015-11-22 06:20:00IT运维版块每日发帖之星
日期:2015-11-08 06:20:00IT运维版块每日发帖之星
日期:2015-10-29 06:20:00IT运维版块每日发帖之星
日期:2016-06-30 06:20:00
8 [报告]
发表于 2015-08-02 00:26 |只看该作者
  1. $a = $_, map { $a = $_, (map { $a->{$_}++ } keys $b), undef %$b if $_->{$a} } @_ for keys $b;
复制代码
回复 4# MMMIX


    这句精辟啊,可是小白的我不太理解,有点绕~,能帮分析下么

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
9 [报告]
发表于 2015-08-02 00:34 |只看该作者
回复 4# MMMIX


bug report:

simon de DATA geide buhao, ceshi zhe 1 zu:

__DATA__
D   E
A   B
F   C
F   G
G   E
E   B


yuqide output:

A B C D E F G


yiwaide output:

B D E G
A B
C F G

or:

D E G
A B E
C F G


huo zhe 1 zu:

__DATA__
D   E
A   B
H   I   J   K   A
L   M   N
O   Q   P
N   P   R
S   T
F   C
F   G
G   E
E   B
T   L
U   V   S
W   X   Y
W   Z
Z   X

output:

W X Y Z
L M N O P Q R S T U V
A B C D E F G H I J K

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
10 [报告]
发表于 2015-08-02 00:47 |只看该作者
回复 8# j_cle

EQ:
  1. for ( keys $b ) {
  2.     $a = $_;
  3.     map {
  4.         if ( $_->{$a} ) {
  5.             $a = $_;
  6.             map { $a->{$_}++ } keys $b;
  7.             undef %$b;
  8.         }
  9.     } @_;
  10. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP