- Assoziative Felder
-
Das Assoziative Array ist eine Datenstruktur, die – anders als ein echtes Array – nichtnumerische Schlüssel (zumeist Zeichenketten) verwendet, um die enthaltenen Elemente zu adressieren; diese liegen in keiner festgelegten Reihenfolge vor. Idealerweise werden die Schlüssel so gewählt, dass eine für die Programmierer nachvollziehbare Verbindung zwischen Schlüssel und Datenwert besteht. Mathematisch betrachtet wird durch die Wertezuordnungen im assoziativen Array eine Funktion mit endlichem Wertebereich beschrieben. Eine Implementation ist mit Bäumen möglich, die bei weitem häufigste Umsetzung ist jedoch die Hashtabelle.
Programmiersprachen, die assoziative Arrays unterstützen, sind z. B. Lua, Perl, PHP, Python, Ruby, LISP, Tcl, Smalltalk, C++, C#, Objective-C (als Klasse der Standardbibliothek), D, Java, Delphi (als Array-Property), PostScript, GNU Bourne-Again SHell (ab Version 4.0), PL/SQL und Visual Basic. Statt von einem assoziativen Array spricht man auch von einem Dictionary (Smalltalk, Python, Objective-C, PostScript, C#), einer Map (C++, Java), einem Hash (Perl, Ruby) oder einer Hashtable/Hashmap (Java, Windows PowerShell).
Beispiele
Die Ausgabe aller Beispiele ist "Mustermann". Es handelt sich um jeweils das identische Beispiel, implementiert in verschiedenen Sprachen.
Eindimensionales Assoziatives Array in Ada:
with Ada.Containers.Indefinite_Hashed_Maps, Ada.Strings.Hash, Ada.Text_IO; procedure Hash_Map_Example is package String_String_Maps is new Ada.Containers.Indefinite_Hashed_Maps (Key_Type => String, Element_Type => String, Hash => Ada.Strings.Hash, Equivalent_Keys => "="); use String_String_Maps; Person : String_String_Maps.Map; begin Person.Insert ("Vorname" , "Hans"); Person.Insert ("Name" , "Mustermann"); Person.Insert ("Geburtstag", "01.01.01"); Person.Insert ("Wohnort" , "Musterstadt"); Ada.Text_IO.Put_Line (Element (Person.Find ("Name"))); end Hash_Map_Example;
Das gleiche Beispiel in Tcl:
set person(Vorname) Hans set person(Name) Mustermann set person(Geburtstag) 01.01.01 set person(Wohnort) Musterstadt puts $person(Name) oder array set person { Vorname Hans Name Mustermann Geburtstag 01.01.01 Wohnort Musterstadt } puts $person(Name)
Das gleiche Beispiel in PHP:
$person = array ( 'Vorname' => 'Hans', 'Name' => 'Mustermann', 'Geburtstag' => '01.01.01', 'Wohnort' => 'Musterstadt'); echo $person['Name']; oder $person = array(); $person['Vorname'] = 'Hans'; $person['Name'] = 'Mustermann'; $person['Geburtstag'] = '01.01.01'; $person['Wohnort'] = 'Musterstadt'; echo $person['Name'];
Das gleiche Beispiel in Perl:
%person = ( 'Vorname' => 'Hans', 'Name' => 'Mustermann', 'Geburtstag' => '01.01.01', 'Wohnort' => 'Musterstadt' ); print $person{'Name'};
Das gleiche Beispiel in Java:
Map<String, String> person = new HashMap<String, String>(); person.put("Vorname", "Hans"); person.put("Name", "Mustermann"); person.put("Geburtstag", "01.01.01"); person.put("Wohnort", "Musterstadt"); System.out.println(person.get("Name"));
Das gleiche Beispiel in C++:
map<string, string> person; person[ "Vorname" ] = "Hans"; person[ "Name" ] = "Mustermann"; person[ "Geburtstag" ] = "01.01.01"; person[ "Wohnort" ] = "Musterstadt"; cout << person["Name"];
Das gleiche Beispiel in Python:
person = { "Vorname" : "Hans", "Name" : "Mustermann", "Geburtstag": "01.01.01", "Wohnort" : "Musterstadt" } print person["Name"] oder person = {} person[ "Vorname" ] = "Hans"; person[ "Name" ] = "Mustermann"; person[ "Geburtstag" ] = "01.01.01"; person[ "Wohnort" ] = "Musterstadt"; print person["Name"]
In Python ist auch folgendes möglich:
print '%(Vorname)s %(Name)s, %(Wohnort)s' % person
Das gleiche Beispiel in Ruby:
person = { :Vorname => 'Hans', :Name => 'Mustermann', :Geburtstag => '01.01.01', :Wohnort => 'Musterstadt' } puts person[:Name]
Das gleiche Beispiel in Windows PowerShell:
$person = @{ Vorname = 'Hans'; Name = 'Mustermann'; Geburtstag = '01.01.01'; Wohnort = 'Musterstadt' } $person['Name']
Das gleiche Beispiel in JavaScript:
var person = { Vorname: 'Hans', Name: 'Mustermann', Geburtstag: '01.01.01', Wohnort: 'Musterstadt' }; alert(person.Name); oder var person = new Object(); person.Vorname = 'Hans'; person.Name = 'Mustermann'; person.Geburtstag = '01.01.01'; person.Wohnort = 'Musterstadt'; alert(person.Name);
Das gleiche Beispiel in PL/SQL:
DECLARE TYPE ty_person IS TABLE OF VARCHAR2(50) INDEX BY VARCHAR2(50); person ty_person; BEGIN person('Vorname') := 'Hans'; person('Name') := 'Mustermann'; person('Geburtstag') := '01.01.01'; person('Wohnort') := 'Musterstadt'; DBMS_OUTPUT.PUT_LINE(person('Name')); END;
Weblinks
Wikimedia Foundation.