Schrift
[thread]6040[/thread]

sort ???

Leser: 2


<< >> 8 Einträge, 1 Seite
frodus
 2004-01-26 19:33
#79556 #79556
User since
2003-09-26
147 Artikel
BenutzerIn
[default_avatar]
Hi,

wie kann ich sort beibringen, ein Array nach meinen
vorgaben zu sortieren?

In dem Array stehen Strings die nur bestimmte Werte annehemen koennen und ich moechte die nach einer von mir
definierten Reihenfolge sortieren lassen.

Z.B.:

Reihenfolge:
1. hello
2. world
3. perl
4. computer

Code: (dl )
1
2
3
$Array[0] =  "world";
$Array[1] = "computer";
$Array[2] = "perl";


Wie wurde ein sort Funktion aussehen um die Felder in die obige reihenfolge zu bringen?
Gast Gast
 2004-01-26 19:53
#79557 #79557
hi,

ganz spontan würde ich:

Code (perl): (dl )
1
2
3
4
5
6
7
8
my %hash = ( hello => 1,
        world => 2,
        perl => 3,
        computer => 4 );

my @array = ("hello", "world", "perl", "computer");
      
my @array1 = sort { $hash{$a} <=> $hash{$b} } @array;


Also jedem Element eine eindeutige Zahl geben. Oder gabs da irgendeine Logik bei dir?

Steve
Crian
 2004-01-26 19:59
#79558 #79558
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Ich glaube ich verstehe das Problem nicht, entweder steh ich gerade auf dem Schlauch oder Du hast es schlecht erklärt, führ das doch mal bitte genau aus :)
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
[E|B]
 2004-01-26 22:11
#79559 #79559
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
HiHo,
du kannst "sort" nicht einfach sagen, wie es zu sortieren hat.
Du kannst nur aus bereits zwei verschiedenen Sortierkriterien wählen:
1) Numerisch
2) Alphanumerisch
Aber festzulegen, dass du genau deine Reihenfolge haben willst, das geht leider nicht. Dafür müsstest du dir schon ein kleines "Progrämmchen" schreiben... ;)
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]
esskar
 2004-01-26 22:39
#79560 #79560
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
steve's methode tut es doch...
Strat
 2004-01-27 00:02
#79561 #79561
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[E|B
,26.01.2004, 21:11]du kannst "sort" nicht einfach sagen, wie es zu sortieren hat.

nein; sort kann man eine vergleichsoperation als Coderef mitgeben, die die folgenden drei Werte zurueckgeben sollte:
< 0: das linke ist kleiner
= 0: beide sind gleich gross
> 0: das linke ist groesser

z.B.
Code: (dl )
@sorted = sort { uc($a) cmp uc($b) } @unsorted;

Code: (dl )
1
2
3
4
@sorted = sort SortSub @unsorted;
sub SortSub {
$irgendwas{$a} <=> $irgendwas{$b};
}

steve's loesung zeigt das sehr schoen
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
pq
 2004-01-27 02:09
#79562 #79562
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[E|B
,26.01.2004, 21:11]du kannst "sort" nicht einfach sagen, wie es zu sortieren hat.

oh, und wie man das kann. du kannst z.b. auch so sortieren:
 @result = sort {(-1..1)[rand 3]} @a;
wobei das eine wirklich ineffiziente methode ist, ein array zu mischen.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
frodus
 2004-01-27 10:10
#79563 #79563
User since
2003-09-26
147 Artikel
BenutzerIn
[default_avatar]
Danke, scheint genau meine Loesung zu sein ich werde es gleich mal auprobieren!:)
<< >> 8 Einträge, 1 Seite



View all threads created 2004-01-26 19:33.