Ich habe eine Liste mit folgender Struktur.
Code: Alles auswählen
Structure TEST
a.i
b.i
Also aus
Code: Alles auswählen
1 30
1 20
2 10
3 10
3 5
4 10
Code: Alles auswählen
1 50
2 10
3 15
4 10
Code: Alles auswählen
Structure TEST
a.i
b.i
Code: Alles auswählen
1 30
1 20
2 10
3 10
3 5
4 10
Code: Alles auswählen
1 50
2 10
3 15
4 10
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
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