Thread Suchalgorithmus (15 answers)
Opened by [E|B] at 2004-02-23 19:08

[E|B]
 2004-02-23 19:08
#80294 #80294
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
HiHo!
Ich habe ein Array, das so aufgebaut ist:

Code: (dl )
1
2
3
5736385736|name|name|name|name
58476374|name|name|name|name
48695475767|name|name|name|name


Jede Zeile entspricht dabei einem Arrayelement.
Ich muss nun dieses Array sortieren. Und zwar stellen die Zahlen am Anfang einen Usernamen in Hexadezimalform dar. Der Algorithmus soll nun den richtigen Namen (also vom Hexadezimalsystem wieder umgewandelt in Buchstaben) nach dem Alphabet sortieren, wobei das gesamte Array Element im neuen sortierten Array natürlich erhalten bleiben soll.
Beispiel:

(1) Umwandlung von Hex

Code: (dl )
1
2
3
Stefan|name|name|name|name
Erik|name|name|name|name
Mark|name|name|name|name


(2) Sortierung nach Namen:

Code: (dl )
1
2
3
Erik|name|name|name|name
Mark|name|name|name|name
Stefan|name|name|name|name


Der Name muss dann natürlich nochmal in seine Hex-Darstellung umgewandelt werden.
Letztendlich sollte also das Array sortiert sein.
Wie kann ich das möglichst mit nur einem einzigen Suchalgorithmus erledigen?
Von Hex nach Buchstaben und zurück verwandele ich immer so:

Code: (dl )
1
2
3
$hex = "Erik";
$hex = unpack("H*", $hex);   # = Hexadezimal
$hex =~ s/([a-fA-F0-9]{2})/pack("C", hex($1))/eg; # ... und wieder zurück


Wer weiß was? ;)\n\n

<!--EDIT|[E|B]|1077556118-->
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]

View full thread Suchalgorithmus