Schrift
[thread]9925[/thread]

Arrays nach einem Wert sortieren

Leser: 2


<< >> 4 Einträge, 1 Seite
Gast Gast
 2007-08-02 00:24
#97188 #97188
Hallo,
Ich habe ein Problem, ich habe ein Programm-Fragment (siehe unten), das Arrays mit vier verschiedenen Werten einliest.

Mein Problem ist nun:
Kann ich die Arrays @array_row nach dem Wert $array_row[3](also $E) ordnen (numerisch absteigend oder aufsteigend) ??
Dabei müssen die vier Werte aber unbedingt zusammenbleiben.

Es sind ziemlich viele Werte, daher ist das ganze etwas kompliziert und zeitaufwändig.
Mit einem Hash gehts auch nicht, weil sich die Werte nicht unbedingt immer unterscheiden (Schlüssen wäre also nicht eindeutig).

Über Lösungsvorschläge wäre ich sehr sehr dankbar!


Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
my @array = ();
my @array_row;

push (@array, "$x $y $z $E");

for my $j(0..$#array)
{
@array_row = split(' ', $array[$j]);

#print "$array_row[3]\n"; # gibt $E aus
#print @array; #alle $x, $y, $z und $E ausgeben
}
sid burn
 2007-08-02 02:08
#97194 #97194
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use utf8;

my @array = (
    [ qw/ david raab 24 3 /    ],
    [ qw/ anne schmidt 23 1/   ],
    [ qw/ manuel montero 24 2/ ],
);

@array = sort { $a->[3] <=>  $b->[3] } @array;

print Dumper \@array;


Das Sortiert nach dem vierten Feld die Ausgabe so das die ausgabe folgendermaßen ist.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$VAR1 = [
[
'anne',
'schmidt',
'23',
1
],
[
'manuel',
'montero',
'24',
2
],
[
'david',
'raab',
'24',
3
]
];


Ich hoffe du verstehst das Beispiel. So wie du Codest könnte ich mir Vorstellen das du noch keine Referenzen kennst?

Wenn die Reihenfolge vertauscht werden soll, muss nur $a und $b ausgetauscht werden.
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
renee
 2007-08-02 11:35
#97217 #97217
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Und bei nicht-numerischen Werten musst Du cmp statt <=> nehmen...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Gast Gast
 2007-08-02 23:23
#97359 #97359
Ich kenne Referenzen, aber nur in der Theorie, bin nicht drauf gekommen ...
Das Beispiel war super, habs verstanden :)

Hat funktioniert, und so schön kurz und prägnant, ein Traum :)

Vielen Dank für die Hilfe!!
<< >> 4 Einträge, 1 Seite



View all threads created 2007-08-02 00:24.