Seite 1 von 1
StructuredList - Duplikate entfernen mit Summierung
Verfasst: 04.02.2017 18:43
von ThoPie
Hallo Leute,
Ich habe eine Liste mit folgender Struktur.
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
hätte ich gern
Wie könnte ich das realisieren. Vielen Dank für eure Mühe.
Re: StructuredList - Duplikate entfernen mit Summierung
Verfasst: 04.02.2017 19:14
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...
Re: StructuredList - Duplikate entfernen mit Summierung
Verfasst: 05.02.2017 00:48
von Sicro
@mk-soft:
ThoPie hat geschrieben:Die Liste ist bereits nach Feld a sortiert.
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
Re: StructuredList - Duplikate entfernen mit Summierung
Verfasst: 05.02.2017 12:02
von mk-soft
@Sicro
Stimmt
Liegt wohl daran das ich ein Map-Fan geworden bin...
Re: StructuredList - Duplikate entfernen mit Summierung
Verfasst: 05.02.2017 17:02
von ThoPie
Hallo Leute.
Vielen Dank. Jetzt komme ich weiter.