我试图将一个数组分成500个批次,但我想覆盖数组大小不均匀除以500的情况.例如:
Array = [1,...,1100]
subArray1 = [1..500]
subArray2 = [500..1000]
subArray3 = [1000..1100]
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止:
my @array = [prepopulated];
my $array_size = scalar(@array);
my $start = 0;
my $end = 500;
while ($start < $array_size) {
my @subArray = @array[$start..$end];
print Dumper(\@subArray);
$start = $end;
if($end + 500 > $array_size) {
$end = $start + ($array_size % 500);
} else {
$end += 500;
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎有效,但有没有更好的方法来做到这一点,或者在某些情况下,我没有看到这种情况?
List::MoreUtils 涵盖了这种任务:
use strict; use warnings;
use List::MoreUtils qw(natatime);
my @Array = (1..1100);
my $it = natatime 500, @Array;
while (my @vals = $it->()) {
printf "%d\n", 0+@vals;
}
Run Code Online (Sandbox Code Playgroud)
500
500
100
Run Code Online (Sandbox Code Playgroud)
无需重新发明轮子.
我认为splice会更简单,更干净:
use strict;
use warnings;
my @array = (1 .. 1100);
my $batch_size = 500;
while (@array) {
my @batch = splice(@array, 0, $batch_size);
# ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
152 次 |
| 最近记录: |