StructuredList - Duplikate entfernen mit Summierung

Anfängerfragen zum Programmieren mit PureBasic.
ThoPie
Beiträge: 130
Registriert: 19.05.2006 15:18
Kontaktdaten:

StructuredList - Duplikate entfernen mit Summierung

Beitrag von ThoPie »

Hallo Leute,
Ich habe eine Liste mit folgender Struktur.

Code: Alles auswählen

Structure TEST
  a.i
  b.i
Die Liste ist bereits nach Feld a sortiert. In a können doppelte Werte vorkommen und in b stehen andere Zahlen. Als Ergebnis brauche ich die Liste ohne Duplikate mit den Summen von b.
Also aus

Code: Alles auswählen

1 30
1 20
2 10
3 10
3 5
4 10
hätte ich gern

Code: Alles auswählen

1 50
2 10
3 15
4 10
Wie könnte ich das realisieren. Vielen Dank für eure Mühe.
Bild
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: StructuredList - Duplikate entfernen mit Summierung

Beitrag von mk-soft »

Vielleicht mit Maps

Update

Code: Alles auswählen

Structure udtValues
  a.i
  b.i
EndStructure


Global NewList Values.udtValues()
Global NewMap Result.udtValues()

; Dummywerte anlegen
For i = 1 To 500
  AddElement(Values())
  Values()\a = Random(20, 1)
  Values()\b = Random(50, 10)
Next

; Summen in Map ablegen
ForEach Values()
  With Values()
    key.s = Str(Values()\a)
    If Not FindMapElement(Result(), key)
      Result(key)\a = \a
    EndIf
    Result()\b + \b
  EndWith
Next

; Ergebnis übernehmen
ClearList(Values())
ForEach Result()
  AddElement(Values())
  Values()\a = Result()\a
  Values()\b = Result()\b
Next

; Ausgabe
SortStructuredList(Values(), #PB_Sort_Ascending, 0, #PB_Integer)

ForEach Values()
  Debug Str(Values()\a) + " = " + Str(Values()\b)
Next
P.S. Kleines Update...
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Sicro
Beiträge: 964
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: StructuredList - Duplikate entfernen mit Summierung

Beitrag von Sicro »

@mk-soft:
ThoPie hat geschrieben:Die Liste ist bereits nach Feld a sortiert.
:wink:

Code: Alles auswählen

EnableExplicit

Structure ValuesStruc
  a.i
  b.i
EndStructure

Define.ValuesStruc NewList Values()
Define.i LastValueA, ValueB, i

; Dummywerte anlegen
For i = 1 To 500
  AddElement(Values())
  Values()\a = Random(20, 1)
  Values()\b = Random(50, 10)
Next
SortStructuredList(Values(), #PB_Sort_Ascending, OffsetOf(ValuesStruc\a), #PB_Integer)

; b-Werte von Duplikaten zusammenzählen und Duplikate löschen
FirstElement(Values())
LastValueA = Values()\a
While NextElement(Values())
  If Values()\a = LastValueA ; Duplikat vom vorherigem Eintrag der Liste?
    ValueB = Values()\b
    DeleteElement(Values())
    Values()\b + ValueB
  Else
    LastValueA = Values()\a
  EndIf
Wend

; Liste ausgeben
ForEach Values()
  Debug Str(Values()\a) + " === " + Str(Values()\b)
Next
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: StructuredList - Duplikate entfernen mit Summierung

Beitrag von mk-soft »

@Sicro
Stimmt <)

Liegt wohl daran das ich ein Map-Fan geworden bin...
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
ThoPie
Beiträge: 130
Registriert: 19.05.2006 15:18
Kontaktdaten:

Re: StructuredList - Duplikate entfernen mit Summierung

Beitrag von ThoPie »

Hallo Leute.
Vielen Dank. Jetzt komme ich weiter.
Bild
Antworten