Assoziatives Datenfeld

aus Wikipedia, der freien Enzyklopädie
(Weitergeleitet von Assoziatives Array)
Wechseln zu: Navigation, Suche
Dieser Artikel oder nachfolgende Abschnitt ist nicht hinreichend mit Belegen (beispielsweise Einzelnachweisen) ausgestattet. Die fraglichen Angaben werden daher möglicherweise demnächst entfernt. Bitte hilf der Wikipedia, indem du die Angaben recherchierst und gute Belege einfügst. Näheres ist eventuell auf der Diskussionsseite oder in der Versionsgeschichte angegeben. Bitte entferne zuletzt diese Warnmarkierung.

Das assoziative Datenfeld (englisch map, dictionary oder associative array) ist eine Datenstruktur, die – anders als ein gewöhnliches Feld (engl. 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, JavaScript, 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).

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"];

Common Lisp[Bearbeiten]

(defparameter *person* (make-hash-table))
 
(setf (gethash 'vorname    *person*) "Hans")
(setf (gethash 'name       *person*) "Mustermann")
(setf (gethash 'geburtstag *person*) "01.01.01")
(setf (gethash 'wohnort    *person*) "Musterstadt")
 
(loop for key being the hash-keys in *person*
      using (hash-value val)
      do (format t "~10a => ~a~%" key val))

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"]);
}

Go[Bearbeiten]

var person = make(map[string]string)
person["Vorname"] = "Hans"
person["Name"] = "Mustermann"	
person["Geburtstag"] = "01.01.01"	
person["Wohnort"] = "Musterstadt"	
println(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);

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 mit Objective-C Literals

NSDictionary *person = @{ @"Vorname" : @"Hans",
                          @"Nachname" : @"Mustermann",
                          @"Geburtstag" : @"01.01.01",
                          @"Wohnort" : @"Musterstadt" };
 
NSLog(@"%@", person[@"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"))

Literatur[Bearbeiten]

  • Peter A. Henning, Holger Vogelsang (Herausgeber): Taschenbuch Programmiersprachen, 2. Auflage, Hanser, München 2007, ISBN 978-3446407442.

Quellenangabe[Bearbeiten]

  1. https://wiki.php.net/rfc/shortsyntaxforarrays