Diskussion:Zuordnungstabelle
Javvascript/JSON ?
Das gleiche Beispiel in JavaScript:
var person = {
Vorname: 'Hans',
Name: 'Mustermann',
Geburtstag: '01.01.01',
Wohnort: 'Musterstadt'
};
alert(person.Name);
Sollte man nicht eher JSON schreiben? --Mr. 1337 21:06, 16. Aug. 2009 (CEST)
- Ist kein JSON, da Strings nur mit Doppelten Anfuehrungszeichen gueltig sind, sowie auch Feld-Bezeichner. --Jerome Baum 04:12, 30. Aug. 2009 (CEST)
Array?
Hi,
findet ihr's korrekt bei diesem Ding von einem Array zu sprechen? Arrays zeichnen sich doch durch feste Länge und Datentyp aus. Das a. Array nicht (mit dem Datentyp kommt's auf die Implementation an).
Bei 'ner Map kann ich nach belieben die Größe durch Hinzufügen verändern, beim echten Array nicht. Da muss ich immer gucken, ob ich das Array nicht durch einen zu großen key "sprenge".
Ausserdem muss ich ganz anders iterieren.
Und vor allem: die Reihenfolge ist nicht definiert und entspricht in keinem Fall der des Einfügens. Und die hängt auch noch von der Implementation ab: Bei Bäumen kann ich unsortierte Daten reintun und krieg sie sortiert raus. Bei HashTables kann ich die Daten sortiert oder unsortiert reintun, sie kommen immer unsortiert wieder raus.
Sollte nicht wenigstens geschrieben werden, dass der Ausdruck a. Array salopp ist?
-- Assoziatives Array ist aber der offizielle Fachausdruck... oder irre ich mich da? --Mr. 1337 21:06, 16. Aug. 2009 (CEST)
Beispiele
Die Beispiele zur Benutzung assoziativer Arrays scheinen mir etwas inkonsistent und umständlich:
Ein Hash lässt sich in Perl einfacher anlegen (vgl. PHP-Beispiel):
my %person = ('Vorname' => 'Hans', 'Name' => 'Mustermann', 'Geburtstag' => '01.01.01', 'Wohnort' => 'Musterstadt'); print $person{'Name'};
Und die Ausgabe des Beispiels einer Map in C++ lässt sich performanter und vor allem sicherer durchführen:
cout << person["Name"];
--Robb der Physiker 19:27, 4. Mär 2006 (CET)
Die vorherige Variante
cout << person.find("Name")->second
liefert, sofern "Name"
in person nicht vorhanden ist, beim Aufruf der Methode second einen Zugriffsfehler, da find in diesem Fall eine Art NULL-Objekt zurückgibt.
--Robb der Physiker 16:26, 29. Apr 2006 (CEST)
Definition?
Also ich will jetz ma Butter bei de Fische und ne klare Definition von nem assoziativen Array! Einerseits ist im Artikel davon die Rede, dass es sich um ein Array handelt, bei dem die Indizes durch Schlüssel in Form von Namen ersetzt wurden. Das drängt den Eindruck auf, dass es sich dabei um nichs anderes als ein Array aus Schlüsseln handelt, denen dann noch jeweils ein Wert folgt. Andererseits ist von Dictionarys und Hashtabellen die Rede. a) werden diese Dinge nicht unbedingt direkt von einer Sprache unterstützt, sondern findet sich sehr oft in Bibliotheken, oder gibt es gar nicht (z.B. VB 6) und b) können in solchen Datenstrukturen ebenso gut Zahlen als Schlüssel verwendet werden.
Also mal ganz klar, hier muss etwas mehr an der Definition gearbeitet werden, bevor Programmiersprachen und Beispiele genannt werden. Und etwas ganz Wesentliches wurde auch unterschlagen: Beim Zugriff auf ein Element in einem indizierten Array benötigt man konstante Zeit, beim Zugriff auf ein Element in einem assoziativen Array aber, jenachdem was eigentlich ein assoziatives Array ist, lineare Zeit, weil die ganzen Schlüssel erst verglichen werden müssen... (z.B. VB 6 und jenachdem was denn mit assozativem Array gemeint ist auch jede Sprache in .Net, VB 7/8, C# 1/2, C++ m. Managed Extensions etc.)
Also die ganze Sache ist sehr, sehr schwammig hier. --Sixot 14:06, 31. Jan. 2007 (CET)
- Es ist richtig, "assoziatives Array" ist ein irreführender Begriff; man kann üblicherweise nicht darüber interieren, und wenn (indirekt) doch (siehe das Python-Beispiel), ist die Reihenfolge üblicherweise willkürlich. Allerdings sind sie üblicherweise schon so implementiert, daß man nicht alle Elemente durchgehen muß, sondern als Hashtabelle oder als binärer Baum. Python-Dictionarys sind sehr schnell; als Schlüsselwerte sind alle Konstanten zulässig (neben Strings und Zahlen also auch Tupel, aber keine Listen, da diese veränderlich sind).
# Python-Beispiel for key,value in person.items(): print '%-10s: %s' % (key, value)
- Ein besserer Name wäre also angebracht. Als Python-Jünger bin ich natürlich für Dictionary; die Hashtabelle ist ja schließlich schon festgelegt auf eine bestimmte Implementierungsart ;-) --Tobias 18:28, 10. Apr. 2007 (CEST)
- Habe die irrige Behauptung entsorgt, ein A.A. sei ein Array. Daß auch Zahlen als Schlüssel dienen können (dann gern mit großen Lücken) und dann trotzdem keine Ausgabereihenfolge definieren (Python-Dictionarys), habe ich erstmal unterschlagen; das hätte zu weit geführt. --Tobias 18:38, 10. Apr. 2007 (CEST)
- Nun ja auf einen einzigen Namen "einigen" müssen und können wir uns nicht so einfach. In vielen Sprachen gibt es mehrere Implementierungen von "eine Liste von Schlüsseln, denen jeweils ein Wert folgt". In .Net z.B. hat man mindestens die Hashtable (aka Dictionary), die Collection (unsortierte Anordnung der Schlüssel mit den Werten), den Binärbaum und eine Datenstruktur, die ich an der Stelle der Einfachheit halber einfach mal sortierte Hashtable nennen will (also eine Hashtable kombiniert mit einem Binärbaum. Die Elemente können neben dem Schlüssel auch über Index angesprochen werden). Alle diese 4 Datenstrukturen fallen in die Datenstruktur "Liste von Schlüssel mit jeweils Werten", lösen die Zugriffe auf den Speicher aber auf ganz unterschiedliche Wege und haben auch unterschiedliche Performanzen in unterschiedlichen Szenarien...--Sixot 13:19, 12. Apr. 2007 (CEST)
Umbenennungsvorschlag
Ich schlage als besseren Namen "Zuordnungstabelle (Datenstruktur)" vor (das wäre neutral; dann bräuchten wir uns nicht zwischen Map und Dictionary entscheiden). Es scheiden m. E. völlig aus:
- Hash/Hashtable, weil sie eine bestimmte Form der Implementierung implizieren
- Collection, weil das Wort eigentlich nichts besagt außer, daß ein Element andere enthält, und in Java für einen gewaltigen Zoo von Collections steht, zu denen auch Listen, Bäume, Sets usw. gehören
Daß das Lemma ausgerechnet nach dem schlechtesten Namen benannt ist, tut schon weh. Wenn sich kein Widerstand regt, schreite ich bei Gelegenheit zur Tat. --Tobias 13:33, 3. Aug. 2007 (CEST)