我有一个主要数组@major
,我希望通过设置我想要的切片数量来划分给定数量的未成年人数组@minor
(让我们在这里说4,但是我希望能够选择我想要的任何数字),就像这个伪代码:
(我知道它不正确,但它有点给你这个想法)
@major = A,B,C,D,E,F,G,H,I,J
$slice = 4;
$arraySize = $#array + 1;
$slicesize = $arraySize / $slice;
@minor1 = @major[0..$slicesize]
@minor2 = @major[($slicesize+1)..(2*$slicesize)]
@minor3 = @major[((2*$slicesize)+1)..(3*$slicesize)]
@minor4 = @major[((3*$slicesize)+1)..(4*$slicesize)]
这里的目标是我希望能够更改初始数组@major
的大小和/或切片数$slice
以及设置不同次数大小的所有值数组(($slicesize+1)
,(2*$slicesize)
等)。
我知道这看起来有点复杂,但我不知道以另一种方式暴露它。 你对如何实现这个有任何想法吗?
答案 0 :(得分:0)
我不太确定你的意思是这样,但这就是我理解你的观点:
#!/usr/bin/perl
use strict; use warnings; use 5.010;
my @array = ( 'A' .. 'Z' );
my $length_of_slice = $ARGV[0] || 5 ;
while ( @array ) {
local $" = ', ';
my @minor = splice @array, 0, $length_of_slice;
say "@minor";
}
答案 1 :(得分:0)
当您有复杂的数据结构要求时,我首先想到的是 - 使用一个对象。 Perl支持面向对象的编程,它允许你做各种非常复杂的事情,比如你正在尝试做的事情。
它是这样的:
#!/usr/bin/perl
use strict;
use warnings;
package TestObject;
my @major = qw(A B C D E F G H I J );
sub new {
my ( $class, $slice_count ) = @_;
my $self = {};
if ( defined $slice_count ) { $self->{slice_count} = $slice_count }
$self->{major} = @major;
bless( $self, $class );
return $self;
}
sub get_slices {
my ( $self, $count ) = @_;
my @tmp = @major;
my @array_of_slices;
for ( 1 .. $count ) {
my $tmp_arr_ref = ();
for ( 0 .. ( @major / $count ) ) {
if ( @tmp ) { push( @$tmp_arr_ref, shift(@tmp) ) };
}
push( @array_of_slices, $tmp_arr_ref );
}
return (@array_of_slices);
}
被叫:
#!/usr/bin/perl
use strict;
use warnings;
use TestObject;
use Data::Dumper;
my $first = TestObject->new();
my @array_of_refs = $first->get_slices(4);
print Dumper \@array_of_refs;
给出结果:
$VAR1 = [
[
'A',
'B',
'C'
],
[
'D',
'E',
'F'
],
[
'G',
'H',
'I'
],
[
'J'
]
];
类似的东西(你必须稍微调整一下,以便根据你想要处理边缘情况/舍入的方式准确地得到你的想法)。