Thread post-processing fetchall_arrayref: DBI (15 answers)
Opened by Gast at 2005-01-25 22:45

renee
 2005-01-26 16:01
#32897 #32897
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Weißt Du was Hashes sind??

Hashes sind Datenstrukturen, die aus Schlüssel - Wert bestehen... Ein Schlüssel ist eindeutig (wie der Primary Key einer Datenbank). Wenn man einen Schlüssel hat, kann man also eindeutig einen Wert bestimmen (der zum Schlüssel gehört).

In Perl sind Hashes durch das % gekennzeichnet (bei der Deklaration). Die Idee bei meinem Lösungsansatz (ist keine komplette Lösung) ist, dass ich zu dem Wert, der schon zu einem Schlüssel besteht, den Quotienten addiere... Bei dem Lösungsansatz musst Du natürlich noch den Hash ausgeben, um Deine Summen der Quotienten angezeigt zu bekommen.

Nehmen wir mal folgende Einträge an:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
ID    Quotient
1    4
2    3
2    5
3    7
3    3
4    9
4    2
4    1
4    7


Dann passiert folgendes...
1.) Der Schlüssel 1 existiert noch nicht, also wird zu 0 (perl nimmt an, dass die 0 gemeint ist) 4 addiert
2.) Der Schlüssel 2 existiert noch nicht, also wird zu 0 3 addiert
3.) Der Schlüssel 2 existiert schon, also wird zu dessen Wert (3) die 5 addiert --> neuer Wert = 8
4.) Der Schlüssel 3 existiert noch nicht, also wird zu 0 7 addiert
5.) Der Schlüssel 3 existiert schon, also wird zu dessen Wert (7) die 3 addiert --> neuer Wert = 10
6.) Der Schlüssel 4 existiert noch nicht, also wird zu 0 9 addiert
7.) Der Schlüssel 4 existiert schon, also wird zu dessen Wert (9) die 2 addiert --> neuer Wert =11
8.) Der Schlüssel 4 existiert schon, also wird zu dessen Wert (11) die 1 addiert --> neuer Wert = 12
9.) Der Schlüssel 4 existiert schon, also wird zu dessen Wert (12) die 7 addiert --> neuer Wert = 19

(mit use warnings gibt es allerdings eine Warnung [_kein_ Fehler] wenn der Schlüssel/Wert noch nicht existiert)

Wenn Du nach der for-Schleife noch das hier gemacht hättest:
Code: (dl )
1
2
3
foreach(sort(keys(%hash))){
 print "Id: ",$_," -> ",$hash{$id},"\n";
}
Dann hättest Du die aufsummierten Quotienten bekommen...

Um sich solch eine Datenstruktur anzuschauen, ist CPAN:Data::Dumper ganz nützlich...
Code: (dl )
1
2
use Data::Dumper;
print Dumper(\%hash);


Aber der Ansatz von Taulmarill ist eindeutig besser, da er weniger Programmierung verlangt, schneller ist...
Welche Fehlermeldung bekommst Du denn?\n\n

<!--EDIT|renee|1106748129-->
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/

View full thread post-processing fetchall_arrayref: DBI