Assoziatives Datenfeld


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

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

Wikimedia Foundation.

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Dope-Vektor — Ein Feld (engl. Array [əˈɹeɪ, Betonung auf 2. Silbe] für „Anordnung“, „Aufstellung“, „Reihe“, „Reihung“, „Bereich“) bezeichnet in der Informatik eine Datenstruktur. Dabei wird zwischen einem Standard Feld und dem assoziativen Array unterschieden …   Deutsch Wikipedia

  • Feldtyp — Ein Feld (engl. Array [əˈɹeɪ, Betonung auf 2. Silbe] für „Anordnung“, „Aufstellung“, „Reihe“, „Reihung“, „Bereich“) bezeichnet in der Informatik eine Datenstruktur. Dabei wird zwischen einem Standard Feld und dem assoziativen Array unterschieden …   Deutsch Wikipedia

  • Speicherabbildungsfunktion — Ein Feld (engl. Array [əˈɹeɪ, Betonung auf 2. Silbe] für „Anordnung“, „Aufstellung“, „Reihe“, „Reihung“, „Bereich“) bezeichnet in der Informatik eine Datenstruktur. Dabei wird zwischen einem Standard Feld und dem assoziativen Array unterschieden …   Deutsch Wikipedia

  • Feld (Datentyp) — Ein Feld (englisch Array [əˈɹeɪ] (Betonung auf 2. Silbe) für ‚Anordnung‘, ‚Aufstellung‘, ‚Reihe‘, ‚Reihung‘, ‚Bereich‘) bezeichnet in der Informatik eine Datenstruktur. Dabei wird zwischen einem Standard Feld und dem assoziativen Array… …   Deutsch Wikipedia

  • Datensätze — Ein Datensatz ist eine zusammengefasste Einheit von Datenfeldern. Beispielsweise können die Datenfelder ‚Name‘, ‚Adresse‘ und ‚Geburtsdatum‘ einen Datensatz zu einer Person bilden. Datensätze werden im Rahmen der Datenverarbeitung häufig in… …   Deutsch Wikipedia