2011-01-05 11 views
-3

Ich habe eine Liste mit folgenden Nummern:Teilen einer Liste von Zahlen auf der Grundlage bestimmter Kriterien

1,2,3,4,5,6,7,8,9,10,11 ..... (Dies ist keine arithmetische Folge. einige Zahlen könnten in der Liste fehlt)

ich habe drei Indizes 1,2,3

ich möchte diese Liste in drei Gruppen zu unterteilen.

1 enthält 1,4,7

2 enthält 2,5,8

3 enthält 3,6,9

Bitte machen Sie mir ein paar gute optimierte Art und Weise, das zu tun wie die Liste ist fast 10.000 Nummer lang.

Ich werde für eine Algo oder ein Programm in Perl anfordern.

-Ravi

+4

Was ist das Kriterium? Index% 3 oder Wert% 3? Was wirst du mit ihnen machen? Ein Weg besteht darin, nur eine for-Schleife mit $ i + = 3 anstelle von $ i ++ für Inkremente zu machen. – Mrki

+3

10.000 ganze Zahlen sind ein winziger Datensatz. Selbst ein nichtoptimierter suboptimaler Algorithmus wird auf jeder modernen Maschine ziemlich schnell arbeiten. – bot403

Antwort

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; 

Sie werden wahrscheinlich eine zusätzliche Zeile innerhalb der Karte muss hinzufügen, wenn Sie die Hash-Schlüssel wollen etwas mehr von Bedeutung.

0

ich nicht genau sehen, was Sie wollen, aber so weit ich verstehen konnte, haben einen Versuch mit:

#!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; [email protected]) { 
    for (my $j=0; $j<@ind; $j++) { 
     push @{$result[$j]}, $list[$i+$j]; 
    } 
} 
say Dumper \@result; 
1

Es gibt auch part Funktion von List::MoreUtils Kernpaket zur Verfügung. Es kann die Liste nach beliebigen Kriterien partitionieren. Wenn Sie wollen position % 3, hier ist ein Beispiel:

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]] 
Verwandte Themen