从perl Nx3数组中提取行

时间:2013-03-17 05:11:44

标签: perl

我想从Nx3数组中提取大小为3x3的块。

    foreach (@TotalData){
         print "@{$_}\n";
    }

给我(作为一个例子):

    .
    .
    0.000 22.00 3.791140e+000
    0.100 22.00 2.737532e+000
    0.200 22.00 2.393466e+000
    .
    .

点表示其他条目。 我想将这个3x3块放在它自己的数组中。 我怎样才能提取这个?

3 个答案:

答案 0 :(得分:2)

你想用块做什么?也许你只想要一片@TotalData(例如@TotalData[4,5,6]或甚至splice(@TotalData, 4, 3)),也许你想要一次循环3(例如List::MoreUtils::natatime);你还没有给出足够的信息来说明。

如果您不介意将@TotalData清除为副作用:

while ( my @block = splice( @TotalData, 0, 3 ) ) {
    # do something with @block (which will have 3 elements,
    # except on the last iteration, where it will have 1-3)
}

只获得3个完整的块:

while ( 3 == ( my @block = splice( @TotalData, 0, 3 ) ) ) {
    # do something with @block (which will have 3 elements)
}

答案 1 :(得分:1)

我很确定PDL有方法可以做到这一点。实际上,在PDL文档的Conway's Game of Life example中调查了几乎同样的问题。

答案 2 :(得分:1)

您在寻找List::MoreUtils::natatime吗?

#!/usr/bin/env perl

use strict;
use warnings;

use List::MoreUtils qw( natatime );

my @data = (
    [1 .. 3],
    [4 .. 6],
    [7 .. 9],
    ['a' .. 'c'],
    ['d' .. 'f'],
    ['g' .. 'i'],
);

my $it = natatime(3, @data);

while (my @set = $it->()) {
    for my $r ( @set ) {
        print "@$r\n";
    }
    print '-' x 30, "\n";
}

输出:

~/tmp> ./jj.pl
1 2 3
4 5 6
7 8 9
------------------------------
a b c
d e f
g h i
------------------------------
相关问题