Thread Hashkey nach Spalten sortiert ausgeben (15 answers)
Opened by bloonix at 2006-05-05 17:58

Ronnie
 2006-05-05 21:42
#65596 #65596
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Sorry, hier nochmal etwas was eher dein Bedürfnis abdecken dürfte. Das ganze ist stark vereinfacht, aber die Idee ist das das jeweilige Objekt ein Attribut Position bekommt. Du brauchst natürlich statt generischer Stat-Objekte, ProcStats- und MemStats- Objekte, die wiederum aus einfacheren Objekten bestehen können, die ebenfalls ein Positions-Attribut bekommen (und evtl. viele andere).
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;

package Stat;
use Moose;

has 'val' => (isa => 'HashRef', is => 'rw');
has 'position' => (is => 'rw');

sub add_kv {
my $self = shift;
my %to_add = @_;
my ($k, $v);
$self->{val}->{$k} = $v while (($k, $v) = each %to_add);
}

sub to_s {
my $self = shift;
my ($k, $v, $s);
$s .= $k . "\t" . $v . "\n" while (($k, $v) = each %{$self->{val}});
return $s;
}

package StatSet;
use Moose;

has 'stats' => (isa => 'ArrayRef', is => 'rw');

sub add_stat {
my $self = shift;
my $stat = shift;
push @{$self->{stats}}, $stat if $stat;
}

sub report {
my $self = shift;
my $s;
$s .= $_->to_s . "\n" for (sort { $a->position <=> $b->position } @{$self->stats});
return $s;
}

package main;

my $set = new StatSet;
my $stat1 = new Stat;
my $stat2 = new Stat;

$stat1->add_kv( color => 'green', size => 'huge' );
$stat1->add_kv( amount => 'some' );
$stat1->position(1);

$stat2->add_kv( color => 'blue', size => 'large', amount => 'many' );
$stat2->position(2);

$set->add_stat($stat1);
$set->add_stat($stat2);

print $set->report;
\n\n

<!--EDIT|Ronnie|1146851611-->

View full thread Hashkey nach Spalten sortiert ausgeben