Struppi: Spalten sortieren

Beitrag lesen

Hallo jonny

Hallo Siechfred,

jetzt starre ich nun schon seit ca. 1 1/2 Stunden auf diese drei Zeilen Code und versuche wirklich es zu verstehen.

@sortiert = map  { $_->[0] }                                #1
            sort { $a->[1] <=> $b->[1] }                    #2
            map  { [ $_, (split / /)[$nr] ] } @zeilen;      #3

Ich habe es folgendermaßen verstanden...

zu 3.
In $_ steht jede volle Zeile aus @zeilen, so wie es auch bei einem normalen Schleifendurchgang der Fall ist "while(<>) {}" und es werden anonyme Arrays gebildet [], genau genommen zwei, nämlich $a->[0] und $a->[1].

Nein, ein Array. Index [0] ist die Zeile und [1] ist die Spalten nach der du sortieren willst.
(es ist übrigens eher eine foreach Schleife als while)

zu 2.
In $a->[0] befindet sich der Inhalt ausser $nr. In in $a->[1] befindet sich der Inhalt der split $nr Operation, also die Spalte, die ich sortieren möchte. Mit der Sortierung in $a->[1] wird auch die Reihenfolge der Zeilen in In $a->[0] angepasst.

In $a->[0] und $b->[0] ist jeweils die komplette Zeile. In [1] ist die Spalte, richtig. Mit 2.) wird das Array (mit den anonymen Array als einträge) das in 1.) (mit dem map) erzeugt wird sortiert.

zu 1.
wie du schon schriebst, wird hier das Ergebnis der Sortierung wieder an $_ zurückgegeben, also die sortierte Spalte wird wieder an ihre position gebracht.

Nein, es werden die ursprüngliche Zeilen sortiert nach n zurückgegeben.

Das ganze ist ungefähr das gleiche wie ich dir hier schon schrieb https://forum.selfhtml.org/?t=99696&m=609398 wobei das von mir aber ein bisschen verständlicher ist als die Schwartzschen Transformation, wie ich finde.

Struppi.