Durchlauf von Map mit ForEach

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
techniker
Beiträge: 160
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.03 LTS [x86])
Benutzeravatar
mk-soft
Beiträge: 3701
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: 64
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 18.3/19.3/21.x/LMDE5 // PureBasic 5.73 / 6.02
Benutzeravatar
TroaX
Beiträge: 661
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
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 | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box :lol:
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
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