Kann man ein 2D-Array mit unterschiedlichen Datentypen erstellen?

8 Antworten

So, wie ich das verstehe, suchst du kein Array, sondern eher eine HashMap. Beispiel in Java:

String[][] tabelle = new String[10][10];

Damit erstellst du ein ein zweidimensionales String-Array. Die Zeilen und spalten kannst du jeweils durch Zahlen adressieren und halt jeweils einen String speichern. Also du könntest z.B. schreiben

tabelle[0][0] = "Hallo"

Bei einem zweidimensionalen Integer Array wäre es dasselbe, nur dass du statt Strings halt Integer Zahlen speichern kannst. Die Adressierung geht aber in beiden Fällen mit Integers.

Was du also suchst, ist eine HashMap

HashMap<String, Integer> liste = new HashMap<String, Integer>();

Damit erstellst du eine Liste, wo du einem "Key" jeweils einen Wert zuweisen kannst. Also du kannst z.B. schreiben

liste.put("Blub", 12);

und hast dadurch einen Key, der "Blub" heißt und den Wert 12 hat. Danach kannst du wieder nach dem Key "Blub" suchen und die Map gibt dir den Wert 12 zurück.

System.out.println(liste.get("Blub"));

Ja das geht in verschiedenen Programmiersprachen von Haus aus. In anderen muss man eine solche Datenstruktur erst selbst programmieren oder eine Drittanbieterbibliothek dafür nutzen.

Hallo,

in C/C++ gibt es die mächtigen void-Pointer, die das ermöglichen. Du baust Dir ein Array des Typs void* und lässt es dann auf Elemente beliebigen Typs zeigen.

// Array-Elemente
float f = 3.1415926535979f;
int i = 42;
char c = 'X';

// 2D void* Array erstellen
void *arr[2][2] = {{"Instagrammer", &c}, {&f, &i}};

// Ausgeben
printf("%s, %c ", (char *)arr[0][0], *(char *)arr[0][1]);
printf("%f, %d\n", *(float *)arr[1][0], *(int *)arr[1][1]);

Beim Zugriff muss das Element in einen 'eindeutigen' Datentyp gecastet werden. Für die primitiven Datentypen (alles außer String hier) muss noch einmal dereferenziert werden.

LG.

Woher ich das weiß:Studium / Ausbildung – Masterstudent in Elektrotechnik 🤓

Wie genau stellst Du Dir das vor? Zeilen und Spalten kreuzen sich. Das würde bedeuten, dass alles beides sein muss.

Du meinst wohl eher: Eine Spalte als Int, die nächste als String usw.

Java bietet dafür die Oberklasse Object, C(++) bietet void*.

Wenn Du die Struktur genau festlegen kannst, dann kannst Du auch eine Klasse/Struct Entry schreiben, in die du unterschiedliche Daten unterschiedlichen Typs schreibst und dann einfach davon einen Array bildest.

Von Haus aus kann Java kein solches Array erstellen, aber du kannst dir eine Klasse erstellen, welche einen String und einen Integer Eintrag hat und daraus dann ein Eindimensionales Array erstellen, was dann aufs selbe kommt.

Btw ein Eindimensionales Array lässt sich bereits als Kombination Integer (Index) und String (Wert) interpretieren, in so fern kann für einige Anwendungsfälle auch ein normales Array so genutzt werden.