Diskussion:Zuordnungstabelle

aus Wikipedia, der freien Enzyklopädie

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)


Außerdem ist
 var person = new Object();
person.Vorname = 'Hans';
person.Name = 'Mustermann';
person.Geburtstag = '01.01.01';
person.Wohnort = 'Musterstadt';
alert(person.Name);

Doch ein Objekt und kein Array. -- SuperDiarrhoe123 (Diskussion) 00:45, 18. Mär. 2012 (CET)

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) -- Da irren Sie sich. "Assoziatives Array" ist ein Ausdruck den es wohl nur in der PHP-Welt gibt. In anderen Sprachen spricht man von Hash-Maps oder Dictionaries. Tatsächlich ist "Assoziatives Array" eine Fehlbenennung innerhalb PHPs und sollte daher nicht in die Wikipedia übernommen werden. ~~ (nicht signierter Beitrag von 176.198.158.100 (Diskussion) 23:18, 3. Feb. 2013 (CET))

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)

  • Da sich seit fast 13 Jahren kein Widerspruch geregt hat und die angekündigte Tat wohl in Vergessenheit geriet, schreite ich mal zur Tat. Das alte Lemma werde ich ebenso wie "Schlüssel-Wert-Paar" als Weiterleitung anlegen. --Vorwald (Diskussion) 07:33, 16. Apr. 2020 (CEST)

Code/Text Proportion

Viel zu viel Code auf der Seite, viel zu wenig Text. Reicht nicht ein einziges Beispiel in einer Sprache aus, und dann stattdessen etwas mehr Infos ueber Implementierungs-Varianten? --Jerome Baum 04:16, 30. Aug. 2009 (CEST)

  • Nachtrag: Gutes Beispiel hierzu ist die Englische Version. --Jerome Baum 04:17, 30. Aug. 2009 (CEST)

C# 'var'?

Seit wann gibt es in C# var? C# ist eine stark Typisierte Sprache und will (wie es die C-Syntax verlangt) bei der Definition einen Datentyp haben. --212.114.159.254 17:22, 6. Mai 2011 (CEST)

Seit Version 3. Der statische Typ der Variablen ist der des Initialisierungsausdrucks. Ähnliches gibt es auch in C++0x; dort wird das Schlüsselwort auto zu diesem neuen Zweck recyclet. --Daniel5Ko 17:33, 6. Mai 2011 (CEST)

Überarbeitung

Beim Lesen dieses Artikels fiel mir auf, dass sowohl Artikel als auch Diskussion verwaist sind?

  • Die Code-Beispiele sind inkonsequent (Beispiel):
    • Der C++ Code ist so nicht ausführbar (es fehlen hier die "main()"-Funktion, die "#includes" und das "#using namespace std").
    • Das Beispiel für "D" erscheint mir hingegen komplett.
  • Ich muss einem meiner Vorredner Recht geben: es wird von den unterschiedlichen Bezeichnungen geredet, aber nicht von den unterschiedlichen Ansätzen in der Implementierung. Ich finde man könnte (mit Verweis auf den jeweiligen Hauptartikel) Gruppieren nach:
    • Binärbaum
    • Hashtable
    • Whatever (z.B. Unterschiede in der Implementierung)
  • Die Behauptung "die bei weitem häufigste Umsetzung ist jedoch die Hashtabelle" möchte ich dann auch belegt sehen. Ich zweifle das ernsthaft an. Hashtabellen machen IMHO nur dann Sinn, wenn es sich um sehr große Datenmengen handelt mit kritischer Zugriffszeit was Schreibe- und Lesezugriffe betrifft... Man wird für alltägliche Aufgaben eher auf Binärbäume zurückgreifen (aufgrund des schnelleren Lesezugriffs bei alltäglichen Aufgaben).
  • Dieser Artikel ist von der Wikipedia ja bereits mit dem Verweis auf die fehlenden Quellenangaben versehen - diese machen für den einleitenden Absatz durchaus Sinn, bei den Codebeispielen könnte man auf die entsprechenden Online-Referenzen verlinken.

WaldorfStatler 02:04, 11. Jan. 2012 (CET) (Sorry - Signatur vergessen und nachträglich eingefügt)

Google bringt bei der Suche nach "assoziatives array" ueber 22000 Treffer.

Der zweite Eintrag ist www.usegroup.de/software/phptutorial/arrays.html Assoziative Arrays, auch Hashs genannt, bieten die Möglichkeit, von der Segmentnummerierung mit Integern Abstand zu nehmen und die Array-Elemente z.B. ...

Man kann also nicht sagen, dass der Begriff nicht existiert. (nicht signierter Beitrag von 138.188.100.230 (Diskussion) 03:19, 20. Jan. 2012 (CET))

Zustand

In diesem Zustand kann man den Artikel nur als unbrauchbar und abschreckendes Beispiel ansehen. Grundlegende Begriffe werden nicht erklärt oder falsch dargestellt, Performanz ignoriert, alternative Bezeichnungen nicht genannt und der Großteil besteht aus Beispielen die weder konsistent noch erklärt werden.

Wie der Name schon sagt, finde da eine Zuordnung statt, Schlüssel auf Wert, wird gemeinhin auch als Dictionary, Wörterbuch, Hashmap bezeichnet. Schlüssel können alles sein, Zahlen, Strings, Objekte, Tupels. Es gibt folgende Operationen: LookUp, Schlüssel hinzufügen, löschen, Wert ändern. Implementiert wird es in der Regel als Hashmap was konstante Zeit bei allen Operationen ermöglicht. Die Schlüssel können geordnet sein, müssen aber nicht. Alternativ ließe es sich auch mit Bäumen implementieren. Und zum Thema Beispiele, bitte nur eine Programmiersprache und dann alle Operationen darauf aufziehen. Keine Vermischung von Operationen mit der Ausgabe bitte.--Darktrym (Diskussion) 12:32, 17. Feb. 2015 (CET)

Zweites C# Beispiel

Das zweite Beispiel für C# erstellt kein Dictionary sondern ein Objekt eines Anonymen Typen. Ich hab' den Code daher aus dem Artikel entfernt. Trancos (Diskussion) 13:38, 24. Mai 2015 (CEST)

Nicht-numerischer Key?

Ähm, afaik kann so ziemlich immer als Key auch eine Ganzzahl verwendet werden. Die darf dann auch bei Null anfangen und fortlaufend hochzählen. In manchen Sprachen ist diese Zugriffsvariante allerdings ein festgelegter Spezialfall, womit dann "normale Arrays" implementiert werden.

Der Artikel erweckt in der Einleitung den Eindruck, dass als Key auf gar keinen Fall Ganzzahlen möglich wären.

--arilou (Diskussion) 13:11, 5. Jun. 2019 (CEST)

Bedeutung des Begriffs "Beispiel"

Die Autoren des Artikels sollten sich bitte mal darüber informieren, was der Unterschied ist zwischen "Beispiele" und "Alles". Von ersterem braucht man nur gerade so viele, wie für das Verständnis notwendig sind. Jedes weitere ist überflüssig.

Sowohl die Aufzählung der Beispiel-Programmiersprachen, in denen es Ass. Arrays gibt,

als auch die Liste der beispielhaften Verwendung

können beide massiv gekürzt werden. Oder ausgelagert in einen Artikel „Liste der Programmiersprachen-Verwendungsbeispiele assoziativer Datenfelder“ o. ä.

Für das Verständnis genügen 2-3 (deutlich unterschiedliche) Beispiele vollauf.

--arilou (Diskussion) 15:26, 31. Jul. 2019 (CEST)

PS: Dies ist eine Löschandrohung.


Umgesetzt. Die gelöschten Sprachen sind jeweils mindestens einem verbliebenen Beispiel sehr ähnlich - und damit überflüssiger Ballast.
--arilou (Diskussion) 11:51, 8. Nov. 2019 (CET)
Und nochmal. --arilou (Diskussion) 09:48, 19. Feb. 2021 (CET)

Common-Lisp-Beispiel fehlerhaft

Ich hab' nur sehr wenig in CL programmiert, und das ist auch schon lange her, ABER:

Ich denke, dass das Beispiel NICHT nur "Mustermann" ausgibt, wie alle anderen Beispiele.

Könnte das ein CL-Programmierer bitte beheben?

--arilou (Diskussion) 09:50, 19. Feb. 2021 (CET)