Assoziatives Datenfeld
Das assoziative Datenfeld (englisch „associative array“) ist eine Datenstruktur, die – anders als ein gewöhnliches 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 [Bearbeiten]
Die Ausgabe aller Beispiele ist „Mustermann“. Es handelt sich jeweils um das gleiche eindimensionale assoziative Feld, implementiert in verschiedenen Sprachen.
Ada [Bearbeiten]
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# [Bearbeiten]
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++ [Bearbeiten]
std::map<std::string, std::string> person; person[ "Vorname" ] = "Hans"; person[ "Name" ] = "Mustermann"; person[ "Geburtstag" ] = "01.01.01"; person[ "Wohnort" ] = "Musterstadt"; std::cout << person["Name"];
D [Bearbeiten]
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 [Bearbeiten]
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 [Bearbeiten]
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 [Bearbeiten]
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 [Bearbeiten]
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 [Bearbeiten]
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 [Bearbeiten]
$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']; echo $person['Name'];
PL/SQL [Bearbeiten]
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 [Bearbeiten]
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 [Bearbeiten]
person = { :Vorname => 'Hans', :Name => 'Mustermann', :Geburtstag => '01.01.01', :Wohnort => 'Musterstadt' } puts person[:Name]
Tcl [Bearbeiten]
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 [Bearbeiten]
$person = @{ Vorname = 'Hans'; Name = 'Mustermann'; Geburtstag = '01.01.01'; Wohnort = 'Musterstadt' } $person['Name']
Scala [Bearbeiten]
val person = Map( "Vorname" -> "Hans", "Name" -> "Mustermann", "Geburtstag" -> "01.01.01", "Wohnort" -> "Musterstadt") println(person("Name"))