Разделение списка чисел на основе заданных критериев - PullRequest
0 голосов
/ 05 января 2011

У меня есть список со следующими номерами:

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

Пожалуйста, предложите мне какой-нибудь хороший оптимизированный способ сделать это, поскольку список насчитывает почти 10000 номеров.

Я буду запрашивать алгоритм или программу на Perl.

-Ravi

Ответы [ 3 ]

1 голос
/ 10 января 2011

Существует также функция part, доступная из List :: MoreUtils core package.Он может разбить список на основе любых критериев.Если вы хотите 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]]
0 голосов
/ 05 января 2011

Я не вижу точно, что вы хотите, но, насколько я мог понять, попробуйте:

#!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;
0 голосов
/ 05 января 2011
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;

Возможно, вам придется добавить дополнительную строку внутри карты, если вы хотите, чтобы ключи хеша были чем-то более значимым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...