|
|
 |

|

 |

| Community » Perl: Allgemeines Forum |
|
Komplexe 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

|
re: 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

|
re: 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

|
re: 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

|
|

|

|

|
 |

|

|
|