- Assoziatives Datenfeld
-
Das assoziative Datenfeld (englisch „associative array“) ist eine Datenstruktur, die – anders als ein echtes Feld (englisch „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 Implementierung ist mit Bäumen möglich, die bei weitem häufigste Umsetzung ist jedoch die Hashtabelle.
Programmiersprachen, die assoziative Felder unterstützen, sind zum Beispiel Lua, Perl, PHP, Python, Ruby, LISP, Tcl, Smalltalk, C++, C#, Objective-C (als Klasse der Standardbibliothek), D, Java, Delphi (als Array-Property), PureBasic, 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, PureBasic), einem Hash (Perl, Ruby), einem Objekt (Javascript) oder einer Hashtable/Hashmap (Java, Windows PowerShell).
Inhaltsverzeichnis
Beispiel
Die Ausgabe aller Beispiele ist „Mustermann“. Es handelt sich jeweils um das gleiche eindimensionale assoziative Feld, implementiert in verschiedenen Sprachen.
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;
C#
var person = new System.Collections.Generic.Dictionary<string, string>(); person[ "Vorname" ] = "Hans"; person[ "Name" ] = "Mustermann"; person[ "Geburtstag" ] = "01.01.01"; person[ "Wohnort" ] = "Musterstadt"; System.Console.WriteLine(person["Name"]);
C++
map<string, string> person; person[ "Vorname" ] = "Hans"; person[ "Name" ] = "Mustermann"; person[ "Geburtstag" ] = "01.01.01"; person[ "Wohnort" ] = "Musterstadt"; cout << person["Name"];
D
import std.stdio; void main(string[] args) { string[string] person; person["Vorname" ] = "Hans"; person["Name" ] = "Mustermann"; person["Geburtstag" ] = "01.01.01"; person["Wohnort" ] = "Musterstadt"; writeln(person["Name"]); }
Haskell
import qualified Data.Map as M -- ... someAction :: IO () someAction = putStrLn $ person M.! "Name" where person = M.fromList [ ("Vorname", "Hans"), ("Name", "Mustermann"), ("Geburtstag", "01.01.01"), ("Wohnort", "Musterstadt") ]
Java
import java.util.HashMap; import java.util.Map; // ... 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"));
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);
Objective-C
NSMutableDictionary *person = [[NSMutableDictionary alloc] init]; [person setValue:@"Hans" forKey:@"Vorname"]; [person setValue:@"Mustermann" forKey:@"Nachname"]; [person setObject:@"01.01.01" forKey:@"Geburtstag"]; [person setObject:@"Musterstadt" forKey:@"Wohnort"]; NSLog(@"%@", [person valueForKey:@"Vorname"]);
oder
NSMutableDictionary *person = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"Hans", @"Vorname", @"Mustermann", @"Nachname", @"01.01.01", @"Geburtstag", @"Musterstadt", @"Wohnort", nil]; NSLog(@"%@", [person valueForKey:@"Vorname"]);
Perl
my %person = ('Vorname' => 'Hans', 'Name' => 'Mustermann', 'Geburtstag' => '01.01.01', 'Wohnort' => 'Musterstadt'); print $person{'Name'};
oder
my %person; $person{'Vorname'} = 'Hans'; $person{'Name'} = 'Mustermann'; $person{'Geburtstag'} = '01.01.01'; $person{'Wohnort'} = 'Musterstadt'; print $person{'Name'};
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'];
Alternative Syntax ab PHP 5.4[1]:
$person = ['Vorname' => 'Hans', 'Name' => 'Mustermann', 'Geburtstag' => '01.01.01.', 'Wohnort' => 'Musterstadt'];
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;
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"]
Ruby
person = { :Vorname => 'Hans', :Name => 'Mustermann', :Geburtstag => '01.01.01', :Wohnort => 'Musterstadt' } puts person[:Name]
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)
Windows PowerShell
$person = @{ Vorname = 'Hans'; Name = 'Mustermann'; Geburtstag = '01.01.01'; Wohnort = 'Musterstadt' } $person['Name']
Scala
val person = Map( "Vorname" -> "Hans", "Name" -> "Mustermann", "Geburtstag" -> "01.01.01", "Wohnort" -> "Musterstadt") println(person("Name"))
Weblinks
Quellenangabe
Wikimedia Foundation.