Schrift
[thread]12270[/thread]

Array schrittweise sortieren

Leser: 1


<< >> 7 Einträge, 1 Seite
bluescreen
 2008-07-29 16:33
#112869 #112869
User since
2008-07-29
4 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen,

ich möchte ein Array in vierer Schritten sortieren.
Also aus:
(1,3,4,2,2,3,4,1)
soll
(1,2,3,4,1,2,3,4)
werden

Wie mach ich das in Perl ohne alles nochmal in einzeln in ein Arrays einzulesen?

Gruß
Bluescreen
FoolAck
 2008-07-29 16:39
#112870 #112870
User since
2008-05-02
69 Artikel
BenutzerIn
[default_avatar]
Quote
Wie mach ich das in Perl ohne alles nochmal in einzeln in ein Arrays einzulesen?

Du kannst ja irgendwie mit arrayslices arbeiten. Musst ja nicht gleich neue Arrays erstellen.

edit:
irgendwie so:
Code (perl): (dl )
1
2
3
4
my @a = (1, 6, 3, 4,   9, 2, 5, 1,   6, 3, 2, 9);
for (my $i = 0; $i <= $#a; $i += 4) {
    print sort @a[map {$_ + $i} (0 .. 3)];
}
bluescreen
 2008-07-29 16:43
#112871 #112871
User since
2008-07-29
4 Artikel
BenutzerIn
[default_avatar]
Kannst du mir mal ein Beispiel dazu erstellen das Array oben schrittweise sortieren kann ?
bluescreen
 2008-07-29 17:03
#112872 #112872
User since
2008-07-29
4 Artikel
BenutzerIn
[default_avatar]
Ok, Danke mit Zahlen funktioniert es schonmal. Jetzt kommt der konkrete Anwendungsfall der mir die Kopfschmerzen bereitet.

Das Array besteht aus mehrere hundert solcher vierer Blöcke:
3 00:0B:3B:42:64:E9 5[9[@+Q6cKgB 06:04:51
1 00:0B:3B:42:65:E6 R1Q!Sw#dVdH= 06:04:51
2 00:0B:3B:42:65:F0 R1Q!Sw#dVdH= 06:04:51
4 00:0B:3B:42:64:5B 5[9[@+Q6cKgB 06:04:51

Die sollen jetzt in vierer schritten sortiert werden, so das nacher so was da steht
1 00:0B:3B:42:65:E6 R1Q!Sw#dVdH= 06:04:51
2 00:0B:3B:42:65:F0 R1Q!Sw#dVdH= 06:04:51
3 00:0B:3B:42:64:E9 5[9[@+Q6cKgB 06:04:51
4 00:0B:3B:42:64:5B 5[9[@+Q6cKgB 06:04:51

Es soll nach der Zahl am Anfang sortiert werden.

Gruß
Bluescreen
FoolAck
 2008-07-29 17:09
#112873 #112873
User since
2008-05-02
69 Artikel
BenutzerIn
[default_avatar]
Diese Anforderung ist nicht kongruent mit deiner initialen Problembeschreibung.
Du willst quasi, dass die 4-er Arrayslices intakt bleiben und jeweils nach dem ersten Element sortieren.

edit:
quasi:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
my @a = qw(3 00:0B:3B:42:64:E9 5[9[@+Q6cKgB 06:04:51
1 00:0B:3B:42:65:E6 R1Q!Sw#dVdH= 06:04:51
2 00:0B:3B:42:65:F0 R1Q!Sw#dVdH= 06:04:51
4 00:0B:3B:42:64:5B 5[9[@+Q6cKgB 06:04:51
);
my @b;       
for (my $i = 0; $i <= $#a; $i += 4) {
    push @b, join " ", @a[map {$_ + $i} (0 .. 3)];
}
print "$_\n" for sort @b

Aber da würde man dann schon wieder über ein "extra" Array gehen. (Außerdem werden aus den kleinen "4er-Arrays" jeweils einzelne Strings...)
bluescreen
 2008-07-29 17:15
#112874 #112874
User since
2008-07-29
4 Artikel
BenutzerIn
[default_avatar]
Hat sich bereits erledigt. Funktioniert jetzt.
Dankeschön :-)
Linuxer
 2008-07-29 21:34
#112876 #112876
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Crosspost zu: http://www.perlboard.de/cgi-bin/perlboard.pl?actio...

Hat Dir asphalts Lösung weitergeholfen? Wenn ja, warum erhält er keine Antwort?

Wenn Du schon nicht in der Lage bist, Deine Crossposts zu kennzeichnen, dann solltest Du wenigstens in allen Foren, wo Du diese Frage gestellt hast, den Hinweis posten, dass das Problem gelöst ist (vor allem wie; es reicht ja ein Link auf den entsprechenden Lösungshinweis)...
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
<< >> 7 Einträge, 1 Seite



View all threads created 2008-07-29 16:33.