Durchlauf von Map mit ForEach

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
techniker
Beiträge: 173
Registriert: 27.01.2016 11:08
Wohnort: BY

Re: Durchlauf von Map mit ForEach

Beitrag von techniker »

@Benubi:
Das ist nicht mein Problem!
Die Keys sind einmalig. Die Werte können aber mehrmals vorhanden sein, was ich detektieren muss.
Als Rückgabe brauche ich die Keys, bei denen doppelte Werte erkannt wurden.
Never change a running system - Never run a changed system!
(PB 6.20 LTS [x86])
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Durchlauf von Map mit ForEach

Beitrag von mk-soft »

Da ist eine Datenbank schon der richtige weg.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
jogo
Beiträge: 118
Registriert: 22.11.2020 20:05
Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint Mate

Re: Durchlauf von Map mit ForEach

Beitrag von jogo »

jetzt mal abgesehen von der Datenbanklösung oder der prophylaktischen Prüfung von Doppelwerten.

Möglicherweise interpretiere ich ja falsch - aber ist das Beispiel in der Hilfe nicht genau das, was du suchst?
Dort wird doch nach vorhandenen Doppelwerten gesucht und gelöscht, oder?
https://www.purebasic.com/german/docume ... ition.html
--
Ideen gibt es viele - man muss sie nur haben...
Mint LMDE5+6 // PureBasic 6.12
Benutzeravatar
TroaX
Beiträge: 684
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Linux Mint | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Linux Mint
Wohnort: NRW
Kontaktdaten:

Re: Durchlauf von Map mit ForEach

Beitrag von TroaX »

jogo hat geschrieben: 20.01.2023 18:22 jetzt mal abgesehen von der Datenbanklösung oder der prophylaktischen Prüfung von Doppelwerten.

Möglicherweise interpretiere ich ja falsch - aber ist das Beispiel in der Hilfe nicht genau das, was du suchst?
Dort wird doch nach vorhandenen Doppelwerten gesucht und gelöscht, oder?
https://www.purebasic.com/german/docume ... ition.html
So eine Lösung hatte er ja schon. Es geht da um die Dauer dieses Vorgehens, da er ja theoretisch jeden Wert mir jedem Wert vergleichen muss und das bei 70K Einträgen.
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Linux Mint
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Linux Mint
NAS: Fritz.Box 5690 Pro (Nur für Keepass-DB)
Coding: Purebasic, Spiderbasic, GDevelop, Javascript/Node
Demivec
Beiträge: 49
Registriert: 22.02.2008 20:49
Wohnort: Utah, USA

Re: Durchlauf von Map mit ForEach

Beitrag von Demivec »

techniker hat geschrieben: 20.01.2023 13:42
mk-soft hat geschrieben: 20.01.2023 12:39 Man verwendet ja Maps um nicht durchsuchen zu müssen und ist somit schon sehr schnell.
Wie erkennst du sonst, welche Keys von Dubletten betroffen sind?
(Dubletten sollen nicht verboten sein, aber müssen detektiert werden)
Die Map hat momentan bis zu 70'000 Elemente.

obst("key1") = "Apfel"
obst("Key2") = "Birne"
obst("key3") = "Banane"
obst("key4") = "Birne"
obst("key5") = "Weintraube"
obst("key6") = "Banane"
obst("key7") = "Banane"

Bei diesem Beispiel brauche ich folgende Keys als Ergebnis:
key2, key3, key4, key6, key7
Ein anderer Weg mit Reverse Lookup:

Code: Alles auswählen

Structure kv_match
  List keys.s()
EndStructure


NewMap obst.s()

obst("key1") = "Apfel"
obst("Key2") = "Birne"
obst("key3") = "Banane"
obst("key4") = "Birne"
obst("key5") = "Weintraube"
obst("key6") = "Banane"
obst("key7") = "Banane"

ForEach obst()
  Debug "obst(" + MapKey(obst()) + ") = " + obst()
Next

Debug "---"
NewMap wert.kv_match()

ForEach obst()
  If FindMapElement(wert(),obst()) = 0
    AddMapElement(wert(), obst())
  EndIf
  AddElement(wert()\keys()): wert()\keys() = MapKey(obst())
Next

Debug "---"
ForEach wert()
  ;SortList(wert()\keys(), #PB_Sort_Ascending)
  If ListSize(wert()\keys()) > 1
    Debug "Wert(" + MapKey(wert()) + ") = " + ListSize(wert()\keys())
    ForEach wert()\keys()
      Debug wert()\keys()
    Next
  EndIf
Next
Bild
Antworten