Schrift
[thread]6229[/thread]

array sortieren nach vorgabe

Leser: 1


<< |< 1 2 >| >> 14 Einträge, 2 Seiten
mordur
 2004-05-04 11:02
#81968 #81968
User since
2003-09-25
182 Artikel
BenutzerIn
[Homepage] [default_avatar]
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.
renee
 2004-05-04 11:20
#81969 #81969
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
@quelle = sort{$help{$a} <=> $help{$b}} keys(%help);
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/
Marcus
 2004-05-04 11:23
#81970 #81970
User since
2004-05-03
18 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich würde das einfach umdrehen. Also denn Hash so aufbauen, das die Keys die Wertigkeit angeben. Dann kannst Du mit:
Code: (dl )
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
Crian
 2004-05-04 11:49
#81971 #81971
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
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
mordur
 2004-05-04 12:08
#81972 #81972
User since
2003-09-25
182 Artikel
BenutzerIn
[Homepage] [default_avatar]
ok danke

@renee

$b<=>$a sortiert aber mehr in meinem sinn ;-)
renee
 2004-05-04 12:15
#81973 #81973
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
oh ja, sorry!
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/
format_c
 2004-05-04 15:44
#81974 #81974
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
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:
Code: (dl )
1
2
3
4
5
6
7
8
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-->
Marcus
 2004-05-04 16:21
#81975 #81975
User since
2004-05-03
18 Artikel
BenutzerIn
[default_avatar]
Ooops, ich glaube ich hab das heute morgen falsch verstanden.
Aber ich hab jetzt noch eine Variante anzubieten:
Code: (dl )
1
2
3
4
5
6
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
pq
 2004-05-04 16:30
#81976 #81976
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
@Marcus: je länger $rating hier ist, desto langsamer wird das ganze.
ein hash-lookup ist da im zweifel immer besser und schneller.
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
format_c
 2004-05-05 02:56
#81977 #81977
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
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
<< |< 1 2 >| >> 14 Einträge, 2 Seiten



View all threads created 2004-05-04 11:02.