根据给定标准划分数字列表

时间:2011-01-05 14:33:49

标签: perl data-structures

我有一个包含以下数字的列表:

1,2,3,4,5,6,7,8,9,10,11 .....(这不是算术级数。列表中可能缺少某些数字)

我有三个索引1,2,3

我想将此列表分为三组。

1将包含1,4,7

2将包含2,5,8

3将包含3,6,9

请给我一些很好的优化方法,因为这个列表的长度差不多是10,000个。

我将在Perl中请求算法或程序。

-Ravi

3 个答案:

答案 0 :(得分:1)

List::MoreUtils核心包还提供part功能。它可以根据任何标准划分列表。如果你想要position % 3,这是一个例子:

use List::MoreUtils qw(part);
use Data::Dump;

my @list = (1,2,3,4,5,6,7,8,9,10,11);

my $i;
my @part = part { $i++ % 3 } @list;
dd [@part];

# prints [[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9]]

答案 1 :(得分:0)

use strict;
use warnings;
use 5.010;
use Data::Dumper;

my @array = (1,2,3,4,5,6,7,8,9,10,11);

my %hash;

map { push @{$hash{$_ % 3}}, $array[$_] } 0..$#array;

say Dumper \%hash;

如果您希望哈希键更重要,您可能需要在地图中添加额外的一行。

答案 2 :(得分:0)

我不确切地知道你想要什么,但据我所知,试试看:

#!perl
use strict;
use warnings;
use 5.10.1;
use Data::Dumper;

my @list = (1..12);
my @ind = (1,2,3);
my @result;

for (my $i=0; $i<@list; $i+=@ind) {
    for (my $j=0; $j<@ind; $j++) {
        push @{$result[$j]}, $list[$i+$j];
    }
}
say Dumper \@result;