Array mit Key und Value

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
alen
Beiträge: 107
Registriert: 09.04.2007 17:38
Computerausstattung: Main Hardware: AMD Ryzen 5 1600 - 6 Core / Gigabyte B450 Aorus Pro / Sapphire RX580 8GB
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64 on various Hardware Platforms
Wohnort: Duisburg
Kontaktdaten:

Array mit Key und Value

Beitrag von alen »

Hallo Zusammen,

ich bin neu bei PB und habe im Hinterkopf die Möglichkeit, die ich von Python her kenne, ein Dictionary zu erzeugen. Mit einem Key und einem dazu gehörigen Value (Wertepaar) ein Array zu erzeugen.

Nun suche ich sowas ähnliches in PB. Also mehr oder weniger wie ein Assoziatives Array. Habe das was mit LinkedLists gesehen aber irgendwie erschließt sich mir die Benutzung nicht so ganz. Habe irgendwas von einem Index gelesen aber komme nicht ganz dahinter.

Vielleicht kann mir jemand auf die Sprünge helfen.

Grüße
Alen
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Array mit Key und Value

Beitrag von Kiffi »

Hallo alen,

willkommen im und an Board!

Zu Deiner Frage:

Leider gibt's in PB keine Dictionaries oder (wie auch in anderen Sprachen
vorhanden) Collections. Das musst Du Dir selber zusammenbauen.

Hier die Array-Variante:

Code: Alles auswählen

Structure s_KeyValue
  Key.s
  Value.s
EndStructure

Dim myArray.s_KeyValue(10)

For I = 0 To 10
  myArray(I)\Key = "MeinSchlüssel" + Str(I)
  myArray(I)\Value = "MeinWert" + Str(I)
Next  

For I = 0 To 10
  Debug myArray(I)\Key 
  Debug myArray(I)\Value
Next
und hier mit LinkedLists:

Code: Alles auswählen

Structure s_KeyValue
  Key.s
  Value.s
EndStructure

NewList myLinkedList.s_KeyValue()

For I = 0 To 10
  AddElement(myLinkedList())
  myLinkedList()\Key = "MeinSchlüssel" + Str(I)
  myLinkedList()\Value = "MeinWert" + Str(I)
Next  

ForEach myLinkedList()
  Debug myLinkedList()\Key 
  Debug myLinkedList()\Value
Next
Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag von Froggerprogger »

Die von Kiffi beschriebene Variante ist allerdings im Zugriff nicht so schnell, wie es sein sollte, da das Array linear nach dem Key durchsucht werden muss. (Einfügen: konstante Zeit, Suchen: lineare Zeit)
Man könnte das durch binäre Suche beschleunigen, wenn das Array anhand der Keys sortiert ist. (Einfügen und Suchen: logarithmische Zeit)

Ein assoziatives Array sollte jedoch als Hashtable implementiert sein, damit man konstante Zugriffszeiten beim Einfügen und Suchen erreicht.

Das gibts in PB nicht nativ, aber vielleicht hat ja schon wer Sources dafür veröffentlicht ? (Habe selbst auch noch irgendwo PB-Hashtables rumfliegen, könnte ab nächste Woche Mo mal danach schauen)
!UD2
Antworten