User since
2003-09-25
182
Artikel
BenutzerIn
moins,
mal wieder was aus der abteilung sort.
ein array soll nach vorgabe von hashwerten umsortiert werden.
my @quelle=(a,b,d);
my %help=(a=>0,b=>3,d=>1);
die Werte des Hashs bezeichnen die wertigkeit der Arrayelemente. jetzt soll so sortiert werden, das in @quelle das element mit der größten wertigkeit vorn steht.also:
# nach sort
@quelle=(b,d,a);
gibts da eine elegante hübsche lösung, oder überhaupt eine? hab im moment keine idee.
User since
2004-05-03
18
Artikel
BenutzerIn
Hallo,
ich würde das einfach umdrehen. Also denn Hash so aufbauen, das die Keys die Wertigkeit angeben. Dann kannst Du mit:
foreach $i sort(keys(%hash))
das neue Array aufbauen.
Ist nur meine erste Idee (spontan), falls ich gleich noch Zeit finde mach ich mal einen Test.
mfg Marcus
User since
2003-08-04
5872
Artikel
ModeratorIn
Schau Dir mal die Snippets zum Thema Sort auf meiner
Perlseite an.\n\n
<!--EDIT|Crian|1083657034-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;
use strict; use warnings; Link zu meiner Perlseite
User since
2003-09-25
182
Artikel
BenutzerIn
ok danke
@renee
$b<=>$a sortiert aber mehr in meinem sinn ;-)
User since
2003-08-04
1706
Artikel
HausmeisterIn
MMh also da finde ich nach deiner Aufgabenstellung finde ich renee's ansatz schon garnet so so schlecht.
aber ich würde die Aufgabe so wie ich sie verstehe mit folgendem Ansatz lösen:
C:\>perl
my @array = qw/a b d/;
my %hash = qw/a 0 b 3 d 1/;
local $, = ',';
print sort { $hash{$b} <=> $hash{$a} } @array;
_ _END_ _
b,d,a
C:\>
Gruß Alex\n\n
<!--EDIT|format_c|1083671184-->
User since
2004-05-03
18
Artikel
BenutzerIn
Ooops, ich glaube ich hab das heute morgen falsch verstanden.
Aber ich hab jetzt noch eine Variante anzubieten:
my @quelle=('a', 'b', 'd');
my $rating='adb';
@quelle = sort { index ($rating, $b) <=> index ($rating, $a) } @quelle;
print @quelle; # Ausgabe: bda
Vielleich nicht so praktikabel aber nett :)
Gruß Marcus
User since
2003-08-04
12208
Artikel
Admin1
@Marcus: je länger $rating hier ist, desto langsamer wird das ganze.
ein hash-lookup ist da im zweifel immer besser und schneller.
User since
2003-08-04
1706
Artikel
HausmeisterIn
Index lohnt sich nur bei sehr vielen Aufrufen nacheinander auf den selben String da er String bei der ersten Ausführung ausüfhrlich indiziert wird.
Gruß Alex