- 论坛徽章:
- 1
|
我觉得大神的这种写法首先要确定按第一列排序,斗胆给大神的代码加了一步排序- #!/usr/bin/perl
- my @sort = map {$_->[0]}
- sort {$a->[1] cmp $b->[1]}
- map {[$_,split]}<DATA>;
- my @foxtable;
- my $V = 0;
- for my $sort (@sort) {
- my ( $A, $B ) = split /\s+/,$sort;
- if($V ne $A){
- $V = $A;
- push @foxtable, [ {}, $V, $B ];
- }
- else{
- push @{ $foxtable[-1] }, $B;
- # $foxtable[-1][0]{$B}++;
- }
- $foxtable[-1][0]{$B}++;
- }
- for (@foxtable) {
- my ( $fox, $tab, @le ) = @$_;
- my ($it) = sort { $b <=> $a } values %$fox;
- my $that = join ',', sort grep $fox->{$_} == $it, keys %$fox;
- print map join( "\t", $tab, $_, $fox->{$_}, $that ) . $/ ,sort @le;
- }
- __DATA__
- A01 A
- A01 C
- A01 C
- A01 C
- A01 B
- A01 A
- A01 C
- A02 D
- A02 D
- A02 B
- A02 B
- A02 A
- A03 A
- A03 D
- A03 B
复制代码 回复 6# rubyish
|
|