Schrift
[thread]7165[/thread]

nach referenz sortieren

Leser: 1


<< |< 1 2 >| >> 19 Einträge, 2 Seiten
Froschpopo
 2005-07-28 14:24
#56757 #56757
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
ich hab nen hash:
Code: (dl )
1
2
3
4
5
%hash = (
1 => [name1, alter1, geschlecht1],
2 => [name2, alter2, geschlecht2]
usw.
);

wie kann ich jetzt nach index 1 sortieren, also nach alter?
dominicn
 2005-07-28 14:32
#56758 #56758
User since
2003-08-08
327 Artikel
BenutzerIn
[default_avatar]
Zwischenfrage: Was willst du als Ergebnis haben? Einen Hash an sich zu sortieren mach IMHO keinen Sinn, oder übersehe ich etwas dabei?
Froschpopo
 2005-07-28 14:35
#56759 #56759
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
ok dann machen wir daraus ein array!

@array = ([1, name1, alter1, geschlecht1], [2, name2, alter2, geschlecht2]...);

den will ich jetzt nach geschlecht sortiert haben.
geschlecht kann sein: w oder m\n\n

<!--EDIT|Froschpopo|1122546937-->
dominicn
 2005-07-28 14:37
#56760 #56760
User since
2003-08-08
327 Artikel
BenutzerIn
[default_avatar]
gut, das ist kein Problem:

Code: (dl )
my @sortedarray = sort { $a->[3] cmp $b->[3] } @array;
Taulmarill
 2005-07-28 17:00
#56761 #56761
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
es lässt sich auch eine sortierte liste der hashkeys erstellen:
Code: (dl )
my @sKeys = sort { $hash{$a}->[2] cmp $hash{$b}->[2] } keys %hash;

imho macht aber ein hash mit numerischen, fortlaufenden keys irgendwie keinen sinn ...\n\n

<!--EDIT|Taulmarill|1122555660-->
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Crian
 2005-07-28 17:40
#56762 #56762
User since
2003-08-04
5870 Artikel
ModeratorIn
[Homepage]
user image
nene, genau dafür gibts doch Arrays =)
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
Froschpopo
 2005-08-31 22:27
#56763 #56763
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
[quote=Froschpopo,28.07.2005, 12:24]ich hab nen hash:
Code: (dl )
1
2
3
4
5
%hash = (
   1 => [name1, alter1, geschlecht1],
   2 => [name2, alter2, geschlecht2]
   usw.
);

wie kann ich jetzt nach index 1 sortieren, also nach alter?[/quote]
dieses array möchte ich jetzt noc zusätzlich zur geschlechtssortierung nach alter sortieren!

Also z.B. so:
name1 (17 w)
name2 (18 w)
name 3 (20 w)
name 4 (14 m)
name 5 (16 m)
name 6 (22 m)
Heromaster
 2005-08-31 22:55
#56764 #56764
User since
2003-08-05
220 Artikel
BenutzerIn
[default_avatar]
CPAN:Sort::Key kann damit umgehen.
Derjenige, der zwei Hasen jagt, lässt einen zurück und verliert den anderen.
pKai
 2005-08-31 23:57
#56765 #56765
User since
2005-02-18
357 Artikel
BenutzerIn
[default_avatar]
Die gesuchte sort-Funktion muss lauten:
"Wenn das Geschlecht gleich ist dann nach Alter, sonst nach Geschlecht".

Beispiel "zu Fuß":
Code: (dl )
1
2
3
4
5
6
7
8
9
my @array = map {my $l = $_; chomp $l; [split /\s/,$l]} <DATA>;
my @sarray = sort { $a->[2] eq $b->[2] ? $a->[1] <=> $b->[1] : $b->[2] cmp $a->[2] } @array;
_ _DATA_ _
name6 22 m
name1 17 w
name5 16 m
name4 14 m
name3 20 w
name2 18 w

Anm: Indices/Dereferenzierungen sind entsprechend an deine erale Datenstruktur anzupassen.\n\n

<!--EDIT|pKai|1125518319-->
I sense a soul in search of answers.
Froschpopo
 2005-09-01 01:57
#56766 #56766
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
mhh aber guck dir mal dein ergebnis an, da stimmt was bei der reihenfolge von den weibern nicht: 17,20,18...
<< |< 1 2 >| >> 19 Einträge, 2 Seiten



View all threads created 2005-07-28 14:24.