Schrift
[thread]8703[/thread]

Sortierte Ausgabe Hash in hash in hash



<< >> 4 Einträge, 1 Seite
Franz
 2007-01-31 15:41
#73876 #73876
User since
2006-07-12
31 Artikel
BenutzerIn
[default_avatar]
Hallo,
ich habe folgendes hash

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
my %dienste=(
"x" => {
"fields" => {
"a" => {
"order" => "03",
"content" => "n"
},
"b" => {
"order" => "02",
"content" => "u"
},
"c" => {
"order" => "01",
"content" => "h"
},
"d" => {
"order" => "04",
"content" => "d"
}
}
}
);


und möchte meinen "content" nun nach "order" sortiert ausgeben
eigentlich ist hash "x" noch in hash "y" und hash "z" aber das kann ich wohl für das grundproblem weglassen, oder?

... ich bekomm es nicht hin - aus den bestehenden forenbreiträgen bin ich leider nicht schlau geworden


Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
my %dienste=(
"z" => {
"y" => {
"x" => {
"fields" => {
"a" => {
"order" => "03",
"content" => "n"
},
"b" => {
"order" => "02",
"content" => "u"
},
"c" => {
"order" => "01",
"content" => "h"
},
"d" => {
"order" => "04",
"content" => "d"
}
}
}
}
}
);
renee
 2007-01-31 16:08
#73877 #73877
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/usr/bin/perl

use strict;
use warnings;

my %dienste=(
"z" => {
"y" => {
"x" => {
"fields" => {
"a" => {
"order" => "03",
"content" => "n"
},
"b" => {
"order" => "02",
"content" => "u"
},
"c" => {
"order" => "01",
"content" => "h"
},
"d" => {
"order" => "04",
"content" => "d"
}
}
}
}
}
);

my $hashref = $dienste{z}->{y}->{x}->{fields};
my @sorted = sort{$hashref->{$a}->{order} <=> $hashref->{$b}->{order} }keys %$hashref;

for my $key(@sorted){
print sprintf "%s -- %s\n",$hashref->{$key}->{order}, $hashref->{$key}->{content};
}
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/
PerlProfi
 2007-01-31 16:10
#73878 #73878
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Auf anhieb würde ich es so machen, aber es geht sicher eleganter:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# felder holen
my $fields = $dienste{z}->{y}->{x}->{fields};

# für die Sortierung
my @order;
my %content;

# @order und %content belegen
foreach my$field (keys %$fields)
{
# order und content vom feld holen
my($order, $content) = ($fields->{$field}->{order}, $fields->{$field}->{content});

# und in @order und %content speichern
push(@order, $order);
$content{$order} = $content;
}

# Sortiert ausgeben
foreach my$key (sort { $a <=> $b } @order)
{
print "$key: $content{$key}\n";
}


edit: ok renees lösung gesehen...

MfG PerlProfi\n\n

<!--EDIT|PerlProfi|1170252717-->
Franz
 2007-01-31 16:19
#73879 #73879
User since
2006-07-12
31 Artikel
BenutzerIn
[default_avatar]
danke!!! :-D so geht's prima!
<< >> 4 Einträge, 1 Seite



View all threads created 2007-01-31 15:41.