我有一个包含以下数字的列表:
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
答案 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;