2015-02-04 71 views
0

我有一個主要數組@major,我想在給定數目的未成年數組中,通過設置我想要的切片數(假設4在這裏,但我希望能夠選擇我想要的任何號碼),這樣的僞代碼: (我知道這是不正確的,但它有點讓你的想法)Perl:使用變量作爲數組元素將主數組劃分爲更小的數組

@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)等)。

我知道這看起來有點複雜,但我不知道以另一種方式公開它。 你有什麼想法如何實現這一目標?

+2

這可能是有趣的:http://search.cpan.org/~rehsack/List-MoreUtils-0.404/lib/List/MoreUtils.pm#part_BLOCK_LIST –

+0

是的。我還建議,對於任何複雜的數據結構來說,要走的路都是製造一個對象。 – Sobrique

回答

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"; 
} 
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' 
      ] 
     ]; 

類似的東西(你必須根據你想要處理邊緣情況/舍入來調整一下,以精確地得到你想要的內容)。

+0

當你最後生產的只是一個簡單的數組數組時,你爲什麼要關注面向對象? – GWP