- 论坛徽章:
- 0
|
谢谢另一个大侠的帮助,已经解决了,代码如下:
my %hash=();
my @arrays = <IN>;
my @lie = sort {(split /\s+/,$a)[2] <=> (split /\s+/,$b)[2] }@arrays;
for (my $i=0;$i<=$#lie;$i++) {
my @line=split(/\s+/,$lie[$i]);
my($name,$direction,$start,$end)=("$line[0]","$line[1]","$line[2]","$line[3]" ;
if (defined($hash{$name}{$direction})) {
my @tmp=(@{$hash{$name}{$direction}},$start,$end);
$hash{$name}{$direction}=\@tmp;
}else{
$hash{$name}{$direction}=[$start,$end];
}
}
foreach my $n (sort keys %hash) {
foreach my $d (sort keys %{$hash{$n}} ) {
for (my $j=$#{$hash{$n}{$d}}; $j>=3; $j=$j-2) {
if (${$hash{$n}{$d}}[$j-1]<=${$hash{$n}{$d}}[$j-2]) {
${$hash{$n}{$d}}[$j]<=${$hash{$n}{$d}}[$j-2] ? (splice(@{$hash{$n}{$d}},$j,1) and splice(@{$hash{$n}{$d}},$j-1,1)) splice(@{$hash{$n}{$d}},$j-1,1) and splice(@{$hash{$n}{$d}},$j-2,1));
}
}
print "$n $d @{$hash{$n}{$d}}\n";
}
}
貌似太过臃肿,希望有大侠能帮我简化一下,感激~ |
|