Zum Inhalt springen

Diskussion:Zuordnungstabelle

Seiteninhalte werden in anderen Sprachen nicht unterstützt.
aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 30. August 2009 um 04:12 Uhr durch Somebody2014 (Diskussion | Beiträge) (Javvascript/JSON ?). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Letzter Kommentar: vor 15 Jahren von Jerome Baum in Abschnitt Javvascript/JSON ?

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)Beantworten

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)Beantworten

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)Beantworten

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)Beantworten
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)Beantworten
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)Beantworten

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)Beantworten