Hauptmenü öffnen
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 (englisch map, dictionary oder associative array) ist eine Datenstruktur, bei der – anders als bei einem gewöhnlichen Feld (engl. array) – 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, 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), einer table (Lua), einem dynamischen Array oder Dynarray (PAL) oder einer Hashtable/Hashmap (Java, Windows PowerShell).

Inhaltsverzeichnis

BeispielBearbeiten

Die Ausgabe aller Beispiele ist „Mustermann“. Es handelt sich jeweils um das gleiche eindimensionale assoziative Feld, implementiert in verschiedenen Sprachen.

AdaBearbeiten

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;

awkBearbeiten

person["Vorname"]    = "Hans"
person["Name"]       = "Mustermann"
person["Geburtstag"] = "01.01.01"
person["Wohnort"]    = "Musterstadt"
print person["Name"]

Bash[1]Bearbeiten

declare -A person=(["Vorname"]="Hans" \
                   ["Name"]="Mustermann" \
                   ["Geburtstag"]="01.01.01" \
                   ["Wohnort"]="Musterstadt")
echo "${person["Name"]}"

oder

declare -A person
person["Vorname"]="Hans"
person["Name"]="Mustermann"
person["Geburtstag"]="01.01.01"
person["Wohnort"]="Musterstadt"
echo "${person["Name"]}"

oder

declare -A person
person[Vorname]="Hans Peter"
person[Name]=Mustermann
person[Geburtstag]=01.01.01
person[Wohnort]=Musterstadt
echo ${person[Name]}

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

oder, seit C# 3 mit Collection Initializer:

var person = new System.Collections.Generic.Dictionary<string, string> {
    {"Vorname",    "Hans"},
    {"Name",       "Mustermann"},
    {"Geburtstag", "01.01.01"},
    {"Wohnort",    "Musterstadt"}
};

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

oder, seit C# 6 mit Index Initializer:

var person = new System.Collections.Generic.Dictionary<string, string> {
    ["Vorname"]    = "Hans",
    ["Name"]       = "Mustermann",
    ["Geburtstag"] = "01.01.01",
    ["Wohnort"]    = "Musterstadt"
};

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

C++Bearbeiten

using namespace std;
map<string, string> person;

person["Vorname"]    = "Hans";
person["Name"]       = "Mustermann";
person["Geburtstag"] = "01.01.01";
person["Wohnort"]    = "Musterstadt";

cout << person["Name"];

oder in C++11 mit Initialisierungslisten:

using namespace std;
map<string, string> person {
    {"Vorname", "Hans"},
    {"Name", "Mustermann"},
    {"Geburtstag", "01.01.01"},
    {"Wohnort", "Musterstadt"}
};

cout << person["Name"];

Common LispBearbeiten

(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))

DBearbeiten

import std.stdio;

void main() {
    string[string] person;
    person["Vorname"]    = "Hans";
    person["Name"]       = "Mustermann";
    person["Geburtstag"] = "01.01.01";
    person["Wohnort"]    = "Musterstadt";
    writeln(person["Name"]);
}

DartBearbeiten

void main() {
  Map<String, String> person = {
    "Vorname": "Hans",
    "Name": "Mustermann",
    "Geburtstag": "01.01.01",
    "Wohnort": "Musterstadt"
  };

  print(person["Name"]);
}

oder

void main() {
  Map<String, String> person = Map<String, String>();

  person["Vorname"] = "Hans";
  person["Name"] = "Mustermann";
  person["Geburtstag"] = "01.01.01";
  person["Wohnort"] = "Musterstadt";

  print(person["Name"]);
}

GoBearbeiten

var person = make(map[string]string)
person["Vorname"] = "Hans"
person["Name"] = "Mustermann"
person["Geburtstag"] = "01.01.01"
person["Wohnort"] = "Musterstadt"
println(person["Name"])

HaskellBearbeiten

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

JavaBearbeiten

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

JavaScriptBearbeiten

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']);

LuaBearbeiten

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)

oder

person = {}
person['Vorname'] = 'Hans'
person['Name'] = 'Mustermann'
person['Geburtstag'] = '01.01.01'
person['Wohnort'] = 'Musterstadt'
print(person['Name'])

[2]

Objective-CBearbeiten

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

PerlBearbeiten

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'};

PHPBearbeiten

$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:[3]

$person = ['Vorname'    => 'Hans',
           'Name'       => 'Mustermann',
           'Geburtstag' => '01.01.01',
           'Wohnort'    => 'Musterstadt'];
echo $person['Name'];

PL/SQLBearbeiten

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;

PureBasicBearbeiten

NewMap person.s()

person("Vorname")    = "Hans"
person("Name")       = "Mustermann"
person("Geburtstag") = "01.01.01"
person("Wohnort")    = "Musterstadt"

Debug person("Name")

PythonBearbeiten

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

REXXBearbeiten

person.Vorname    = "Hans"
person.Name       = "Mustermann"
person.Geburtstag = "01.01.01"
person.Wohnort    = "Musterstadt"
say person.Name

RubyBearbeiten

person = {
    :Vorname    => 'Hans',
    :Name       => 'Mustermann',
    :Geburtstag => '01.01.01',
    :Wohnort    => 'Musterstadt'
}
puts person[:Name]

Ab Ruby 1.9:

person = {
    Vorname:    'Hans',
    Name:       'Mustermann',
    Geburtstag: '01.01.01',
    Wohnort:    'Musterstadt'
}
puts person[:Name]

TclBearbeiten

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 PowerShellBearbeiten

$person = @{
    Vorname    = 'Hans';
    Name       = 'Mustermann';
    Geburtstag = '01.01.01';
    Wohnort    = 'Musterstadt'
}
$person['Name']

ScalaBearbeiten

val person = Map("Vorname" -> "Hans",
    "Name" -> "Mustermann",
    "Geburtstag" -> "01.01.01",
    "Wohnort" -> "Musterstadt")

println(person("Name"))

SwiftBearbeiten

var variablePerson: [String:String] = [:]
variablePerson["Vorname"]  =  "Hans"
variablePerson["Name"] = "Mustermann"
variablePerson["Geburtstag"] = "01.01.01"
variablePerson["Wohnort"] = "Musterstadt"

let constPerson = [
    "Vorname": "Hans",
    "Name": "Mustermann",
    "Geburtstag": "01.01.01",
    "Wohnort": "Musterstadt"
]

if let name = constPerson["Name"] {
    print(name)
}

Assoziative Datenfelder in Swift liefern ein Optional zurück.

XProfanBearbeiten

Ab Version X3 (2014)

declare hash person[]

person["Vorname"] = "Hans"
person["Name"] = "Mustermann"
person["Geburtstag"] = "01.01.01"
person["Wohnort"] = "Musterstadt"
person["Alter"] = 34

print person["Name"]

LiteraturBearbeiten

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

EinzelnachweiseBearbeiten

  1. www.gnu.org
  2. Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes: Lua 5.3 Reference Manual. Lua.org, PUC-Rio, abgerufen am 25. Juni 2018 (englisch).
  3. wiki.php.net