perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 21
Click for quality!




11.02.2012 / 06:57

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragKomplexe Datenstruktur sortieren
Seitenanfang
Hallo,

und zwar ich gerade folgendes problem bei dem ich anstehe und auch im Internet (bisher) nichts gefunden hab.

Ich hab als Datenstruktur einen Hash, dessen Key in meinem Fall Ids (Gen-ID) sind und als Value ein 2 dim. anonymes Array (Start- und Endposition des Genes)

Struktur ist also diese:


my %genes = ('GeneA' => [0, 10],
'GeneB' => [0, 8],
'GeneC' => [13,17]);

nun möchte ich diesen Hash nach der Startposition sortiert ausgeben was auch mit dieser foreach schleife gut funktioniert


foreach my $geneid (sort {$genes{$a}[0] <=> $genes{$b}[0]} keys %genes)

nur ist jetzt das problem, dass Gene den gleichen Start, aber andere Endpositionen haben können. und somit sollte, falls die Startposition gleich ist, nochmal nach der Endposition sortiert werden.
(Ausgabereihenfolge wäre also in oben genanntem Beispiel GeneB, GeneA, GeneC)

Hat wer ne Idee? Oder is die Lösung so einfach dass ich einfach schon nen Knopf im Hirn hab :)

lg, Nina

Datum: 15.09.2005-13:32

Beitragre: Komplexe Datenstruktur sortieren
Seitenanfang
Hi,
Du musst nur in das sort eine weitere Bedingung aufnehmen:

my %genes = ('GeneA' => [0, 10],
'GeneB' => [0, 8],
'GeneC' => [13,17]);

foreach my $geneid (sort {$genes{$a}[0] <=> $genes{$b}[0]
||
$genes{$a}[-1] <=> $genes{$b}[-1]} keys %genes) {
print $geneid, "\n";
}


ergibt:

GeneB
GeneA
GeneC

Gruss,
svenXY

Datum: 15.09.2005-14:24

Beitragre: Komplexe Datenstruktur sortieren
Seitenanfang
sorry, kurze Erklärung zu obigem code:

die sort Funktion gibt entweder -1, 0 oder 1 zurück. Bei 0 sind beide gleich.

Beim || (or) wird die zweite Bedingung nur ausgewertet, wenn die ertse falsch (also 0) ist.

Deshalb kommt die zweite nur ins Spiel, wenn bei der ersten noch keine Entscheidung hinsichtlich der Sortierung gefallen ist.

Gruss,
svenXY

Datum: 15.09.2005-14:27

Beitragre: Komplexe Datenstruktur sortieren
Seitenanfang
juhu danke schön für die schnelle Antwort :)

dachte mir fast dass die Lösung nicht so aufwändig sein würde aber auf die Idee die sort-Bedingungen mit || zu verknüpfen wär ich nicht gekommen :) (bzw. wusste nicht das dies überhaupt möglich ist.. perl is ja so herrlich flexibel :D)

danke noch mal :)

Datum: 15.09.2005-14:47

-






-
-