如何在一行中打印一定数量的结果
how to print a certain amount of results on a single line
我想每行最多打印 10 个结果,然后在 10 个结果后强制换行。我该怎么做?
这是代码:
my @email;
my @gender;
my @state;
while ( <> ) {
chomp;
my @fields = split /,/;
push @gender, $fields[5];
push @email, $fields[3];
push @state, $fields[4];
}
#records
print "There are $_ records in this file\n" for scalar (@email-1);
print "\n";
#gender
my %count;
$count{$_}++ for @gender;
while( my ($gender => $count) = each %count) {
delete $count{gender};}
print "Male/Female distribution:\n";
print join(' ',%count), "\n";
print "\n";
#email
#states
my %scount;
$scount{$_}++ for @state;
while( my ($state => $scount) = each %scount){
delete $scount{state};}
print join(' ',%scount), "\n";
及其结果:
8 NC 292 OK 163 NY 901 VA 477 PA 195 NE 62 OH 711 WV 37 NM 10 MO 7 NH 77 MA 689 MN 431 TX 920 ME 81 NJ 673 RI 91 AL 230 KS 22 ND 31 FL 461 CT 305 CA 1262 IA 139 DE 33 CO 118 MI 378 IN 211 AR 163 IL 811 KY 11
所以例如我想在 NM 10
之后换行。
将print join(' ',%scount), "\n";
更改为:
my $n;
print map {$n++; $n % 10 ? "$_ $scount{$_} ":"$_ $scount{$_}\n"} keys %scount;
可能更具可读性:
my @results = %count;
while (@results) {
print(join(" ", splice(@results, 10)), "\n");
}
我想每行最多打印 10 个结果,然后在 10 个结果后强制换行。我该怎么做?
这是代码:
my @email;
my @gender;
my @state;
while ( <> ) {
chomp;
my @fields = split /,/;
push @gender, $fields[5];
push @email, $fields[3];
push @state, $fields[4];
}
#records
print "There are $_ records in this file\n" for scalar (@email-1);
print "\n";
#gender
my %count;
$count{$_}++ for @gender;
while( my ($gender => $count) = each %count) {
delete $count{gender};}
print "Male/Female distribution:\n";
print join(' ',%count), "\n";
print "\n";
#email
#states
my %scount;
$scount{$_}++ for @state;
while( my ($state => $scount) = each %scount){
delete $scount{state};}
print join(' ',%scount), "\n";
及其结果:
8 NC 292 OK 163 NY 901 VA 477 PA 195 NE 62 OH 711 WV 37 NM 10 MO 7 NH 77 MA 689 MN 431 TX 920 ME 81 NJ 673 RI 91 AL 230 KS 22 ND 31 FL 461 CT 305 CA 1262 IA 139 DE 33 CO 118 MI 378 IN 211 AR 163 IL 811 KY 11
所以例如我想在 NM 10
之后换行。
将print join(' ',%scount), "\n";
更改为:
my $n;
print map {$n++; $n % 10 ? "$_ $scount{$_} ":"$_ $scount{$_}\n"} keys %scount;
可能更具可读性:
my @results = %count;
while (@results) {
print(join(" ", splice(@results, 10)), "\n");
}