====== Datentypen (III): Hash/Array/Dictionary ====== Erklärung: Wie kann ich mir zu einem Wert (z.B. einem Namen) einen weiteren Wert merken (z.B. das Alter)? Oft ist es nützlich, zusätzlich zu einem bekannten Wert (dem Schlüssel) einen weiteren Wert zu kennen (den "Wert"). Beispiel: * Telefonbuch: Schlüssel = Name, Wert = Telefonnummer * Wörter-Zähler: Schlüssel = Wort, Wert = Häufigkeit/Anzahl Wie kann man sich die Datenstruktur vorstellen? Bild mit Eimer und Fähnchen === Syntaxaufgaben === * Wie lege ich einen leeren Hash an? * Wie lege ich einen Hash incl. erster Elemente an? * Wie füge ich neue Elemente hinzu? * Wie lese ich ein Element aus? * Wie lösche ich ein Element? * Wie verändere ich Elemente, die schon im Hash drin sind? * Wie überprüfe ich, ob mein Hash zu einem bestimmten Schlüssel einen Wert enthält? * Wie finde ich die Menge aller Schlüssel? Werte? * Wie iteriere ich über alle Einträge? * Kann ich ein Array in einen Hash umwandeln? Wenn ja: wie? === Doku === [[hashtabelle perl |Perl]] * [[hashtabelle python |Python]] * [[hashtabelle ruby |Ruby]] * [[hashtabelle php |PHP]] * [[hashtabelle JavaScript|JavaScript]] * [[hashtabelle go|Go]] === Problemlösungsaufgabe: donau === Schreibe ein Programm ''donau'', dass vom Benutzer eine Eingabe eines der Datenfelder ''name'', ''länge'', ''quelle'', ''quellhöhe'', ''mündungshöhe'' erwartet. Und darauf den entsprechenden Wert aus folgendem Datensatz ausgibt: name: 'Donau', länge: 2857, quelle: 'Bregquelle', quellhöhe: 1078, mündungshöhe: 0, Aufruf des Programms: ./donau Ausgabe/Eingabe: Bitte geben Sie das gewünschte Feld ein: (name, länge, quelle, quellhöhe oder mündungshöhe) name Donau === Problemlösungsaufgabe: statistik === Schreibe ein Programm ''statistik'', das vom Benutzer eine Eingabe erwartet. Sobald der Benutzer eine leere Zeile eingibt, gibt das Programm eine Statistik über die Häufigkeit der eingegebenen Zeichen aus. Aufruf des Programms: ./statistik Ausgabe/Eingabe: Bitte geben Sie Zeichen ein. Beenden durch Leerzeile! Dies ist ein Text. Dies ist MEIN Text. Mein Text ist ein toller Text und nicht nur ein Test! D -- 2 E -- 1 I -- 1 M -- 2 N -- 1 T -- 5 n -- 7 -- 18 ! -- 1 c -- 1 d -- 1 e -- 12 h -- 1 i -- 10 l -- 2 . -- 2 o -- 1 r -- 2 s -- 6 t -- 10 u -- 2 x -- 4 Zusatz 1: Sortiere die Statistik nach dem eingegebenen Zeichen. Aufruf des Programms: ./statistik Ausgabe/Eingabe: Bitte geben Sie Zeichen ein. Beenden durch Leerzeile! Dies ist ein Text. Dies ist MEIN Text. Mein Text ist ein toller Text und nicht nur ein Test! -- 18 ! -- 1 . -- 2 D -- 2 E -- 1 I -- 1 M -- 2 N -- 1 T -- 5 c -- 1 d -- 1 e -- 12 h -- 1 i -- 10 l -- 2 n -- 7 o -- 1 r -- 2 s -- 6 t -- 10 u -- 2 x -- 4 Zusatz 2: Sortiere die Statistik nach der Anzahl der Zeichen. Aufruf des Programms: ./statistik Ausgabe/Eingabe: Bitte geben Sie Zeichen ein. Beenden durch Leerzeile! Dies ist ein Text. Dies ist MEIN Text. Mein Text ist ein toller Text und nicht nur ein Test! -- 18 e -- 12 i -- 10 t -- 10 n -- 7 s -- 6 T -- 5 x -- 4 M -- 2 D -- 2 . -- 2 l -- 2 r -- 2 u -- 2 I -- 1 N -- 1 E -- 1 h -- 1 o -- 1 c -- 1 ! -- 1 d -- 1 Zusatz 3: Gib ein Ascii-Diagramm der Statistik aus. Die Breite der Balken soll dabei für das meist-eingegebene Zeichen auf 60 gesetzt werden. Aufruf des Programms: ./statistik Ausgabe/Eingabe: Bitte geben Sie Zeichen ein. Beenden durch Leerzeile! Dies ist ein Text. Dies ist MEIN Text. Mein Text ist ein toller Text und nicht nur ein Test! -- 18 888888888888888888 e -- 12 222222222222 i -- 10 0000000000 t -- 10 0000000000 n -- 7 7777777 s -- 6 666666 T -- 5 55555 x -- 4 4444 D -- 2 22 . -- 2 22 M -- 2 22 l -- 2 22 u -- 2 22 r -- 2 22 E -- 1 1 N -- 1 1 I -- 1 1 d -- 1 1 ! -- 1 1 c -- 1 1 o -- 1 1 h -- 1 1