a bb c
d e f
g h
####
use strict;
use warnings;
sub chunk_array {
my ($n, @vals) = @_;
my $str;
my $i = 0;
for my $v (@vals) {
++$i;
$str .= $v . ( ($i % $n) ? " " : "\n" );
}
substr($str, -1, 1) = "\n";
return $str;
}
my $v1 = chunk_array(3, "a", "bb", "c", "d", "e", "f", "g", "h");
$v1 eq "a bb c\nd e f\ng h\n" or die "error: '$v1'\n";
print $v1;
my $v2 = chunk_array(3, "a", "bb", "c", "d", "e", "f");
$v2 eq "a bb c\nd e f\n" or die "error: '$v2'\n";
print $v2;
##
##
use List::MoreUtils qw(part natatime);
sub chunk_array {
my ($n, @vals) = @_;
my $str;
my $iter = natatime($n, @vals);
while ( my @line = $iter->() ) {
$str .= join(" ", @line) . "\n";
}
return $str;
}
sub chunk_array {
my ($n, @vals) = @_;
my $i = 0;
return join "", map { join(" ", @$_)."\n" } part { $i++/$n } @vals;
}
##
##
from itertools import *
def group(n, iterable):
args = [iter(iterable)] * n
return izip_longest(*args)
def chunk_array(n, vals):
return "".join(" ".join(x for x in i if x!=None)+"\n" for i in group(n, vals))