Assoziatives Datenfeld

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
Dieser Artikel oder nachfolgende Abschnitt ist nicht hinreichend mit Belegen (beispielsweise Einzelnachweisen) ausgestattet. Angaben ohne ausreichenden Beleg könnten demnächst entfernt werden. Bitte hilf Wikipedia, indem du die Angaben recherchierst und gute Belege einfügst.

Das assoziative Datenfeld ist eine Datenstruktur, bei der anders als bei einem gewöhnlichen Feld auch nichtnumerische (oder nicht fortlaufende) Schlüssel, zumeist Zeichenketten, verwendet werden können, um die enthaltenen Elemente zu adressieren; diese sind in keiner festgelegten Reihenfolge abgespeichert. 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 Abbildung mit endlicher Definitionsmenge und endlicher Bildmenge 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, awk, Smalltalk, C++, C#, Objective-C (als Klasse der Standardbibliothek), D, Java, Delphi (als Array-Property), PureBasic, PostScript, Bash (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), einem Table (Lua), einem dynamischen Array oder Dynarray (PAL), einer Hashtable/Hashmap (Java, Windows PowerShell) oder einer Compound Variable (REXX).

Beispiel[Bearbeiten | Quelltext bearbeiten]

Die Ausgabe aller Beispiele ist „Mustermann“. Es handelt sich jeweils um das gleiche eindimensionale assoziative Feld, implementiert in verschiedenen Sprachen. Mitunter gibt es in den Sprachen weitere Möglichkeiten, ein assoziatives Datenfeld anzulegen.

C#[Bearbeiten | Quelltext 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"]);

oder, seit C# 3 mit Collection Initializer:

using System;
using System.Collections.Generic;

var person = new Dictionary<string, string>() {
    { "Vorname", "Hans" },
    { "Name", "Mustermann" },
    { "Geburtstag", "01.01.01" },
    { "Wohnort", "Musterstadt" }
};

Console.WriteLine(person["Name"]);

Common Lisp[Bearbeiten | Quelltext 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))

Haskell[Bearbeiten | Quelltext 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")
    ]

Objective-C[Bearbeiten | Quelltext 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"]);

Perl[Bearbeiten | Quelltext bearbeiten]

%person = ('Vorname', 'Hans', 'Name', 'Mustermann', 'Geburtstag', '01.01.01', 'Wohnort', 'Musterstadt');
print $person{'Name'};

PL/SQL[Bearbeiten | Quelltext 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;

Tcl[Bearbeiten | Quelltext bearbeiten]

array set person {
    Vorname    Hans
    Name       Mustermann
    Geburtstag 01.01.01
    Wohnort    Musterstadt
}
puts $person(Name)

Literatur[Bearbeiten | Quelltext bearbeiten]

  • Peter A. Henning, Holger Vogelsang (Hrsg.): Taschenbuch Programmiersprachen. 2. Auflage. Hanser, München 2007, ISBN 978-3-446-40744-2.

Einzelnachweise[Bearbeiten | Quelltext bearbeiten]