Sortieren von Tabellen
Sortieren von Tabellen
Hallo!
Wie kann ich folgendes Beispiel sortiert in einer Tabelle ausgeben?
Structure Spieler
Name.s
Alter.w
Groesse.w
Endstructure
Dim Teilnehmer.Spieler(10)
damit sowas rauskommt:
Name _ _ Punkte _ _ Sätze
1. Klaus _ 54 _ _ _ 22
2. Peter _ 38 _ _ _ 36
3. Tim _ _ 38 _ _ _ 27
4. Paul _ _ 22_ _ _ 17
Entscheidendes Kriterium sollen natürlich die meisten Punkte sein. Bei Punktegleichstand soll die höhere Anzahl an Sätzen gelten.
Mit Sortarray fluppt das irgendwie nicht.
Vielen Dank
Oli
Wie kann ich folgendes Beispiel sortiert in einer Tabelle ausgeben?
Structure Spieler
Name.s
Alter.w
Groesse.w
Endstructure
Dim Teilnehmer.Spieler(10)
damit sowas rauskommt:
Name _ _ Punkte _ _ Sätze
1. Klaus _ 54 _ _ _ 22
2. Peter _ 38 _ _ _ 36
3. Tim _ _ 38 _ _ _ 27
4. Paul _ _ 22_ _ _ 17
Entscheidendes Kriterium sollen natürlich die meisten Punkte sein. Bei Punktegleichstand soll die höhere Anzahl an Sätzen gelten.
Mit Sortarray fluppt das irgendwie nicht.
Vielen Dank
Oli
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Vielleicht so?
Code: Alles auswählen
Structure Spieler
Name.s
Alter.w
Groesse.w
Punkte.l
Saetze.l
EndStructure
Dim Teilnehmer.Spieler(10)
Teilnehmer(0)\Name = "Pedro"
Teilnehmer(0)\Punkte = 10
Teilnehmer(1)\Name = "Miguel"
Teilnehmer(1)\Punkte = 50
Teilnehmer(2)\Name = "Sanchez"
Teilnehmer(2)\Punkte = 20
SortStructuredArray(Teilnehmer(), 1, OffsetOf(Spieler\Punkte), #PB_Sort_Long)
For I = 0 To 2
Debug Teilnehmer(I)\Name + ": " + Str(Teilnehmer(I)\Punkte)
Next
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Versuch doch 2 Sortierungen, erst nach dem Zweirangigem und danach nach
dem Erstrangigem. Habs nicht getestet, sollte aber gehen.
dem Erstrangigem. Habs nicht getestet, sollte aber gehen.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Hallo nochmal!
Klappt leider doch noch nicht richtig mit der Tabelle ...
Habe mal diese kleine Tabellen-Übung geschrieben.
Wie gesagt, erster soll der mit den meisten Punkten sein, bei Punktgleichheit soll die bessere Tordifferenz entscheiden (wie in Sportligen).
Doch beim zweiten Sortstructuredarray bringt er die Tordifferenz wieder durcheinander.
Hat jemand vielleicht eine Idee, wie ich das Problem lösen kann oder wo mein Denkfehler ist?
Vielen Dank und viele Grüße
Oli
Klappt leider doch noch nicht richtig mit der Tabelle ...

Habe mal diese kleine Tabellen-Übung geschrieben.
Wie gesagt, erster soll der mit den meisten Punkten sein, bei Punktgleichheit soll die bessere Tordifferenz entscheiden (wie in Sportligen).
Doch beim zweiten Sortstructuredarray bringt er die Tordifferenz wieder durcheinander.
Structure Mannschaft
Name$
Punkte.w
Tore.w
Gegentore.w
Tordifferenz.w
EndStructure
Dim Team.Mannschaft(10)
Procedure Ausgabe_Tabelle()
If OpenWindow(0, 100, 100, 500, 400, #PB_Window_SystemMenu , "Tabelle")
If CreateGadgetList(WindowID())
ListIconGadget(0, 5, 5, 490, 390, "Platz", 40)
AddGadgetColumn(0, 1, "Mannschaft", 200)
AddGadgetColumn(0, 2, "Punkte", 50)
AddGadgetColumn(0, 3, "Tore", 50)
AddGadgetColumn(0, 4, "Dif.", 50)
EndIf
For i = 1 To 5
AddGadgetItem(0, -1, Str(i) + "." + Chr(10) + team(i)\Name$ + Chr(10) + Str(team(i)\Punkte) + Chr(10) + Str(team(i)\Tore) + " : " + Str(team(i)\gegentore) + Chr(10) + Str(team(i)\Tordifferenz) )
Next
EndIf
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_CloseWindow
Quit = 1
EndIf
Until Quit=1
EndProcedure
team(1)\name$ = "Team 1"
team(1)\punkte = 12
team(1)\Tore = 22
team(1)\Gegentore = 18
team(1)\Tordifferenz = team(1)\Tore - team(1)\gegentore
team(2)\name$ = "Team 2"
team(2)\punkte = 11
team(2)\Tore = 26
team(2)\Gegentore = 12
team(2)\Tordifferenz = team(2)\Tore - team(2)\gegentore
team(3)\name$ = "Team 3"
team(3)\punkte = 11
team(3)\Tore = 21
team(3)\Gegentore = 13
team(3)\Tordifferenz = team(3)\Tore - team(3)\gegentore
team(4)\name$ = "Team 4"
team(4)\punkte = 10
team(4)\Tore = 17
team(4)\Gegentore = 19
team(4)\Tordifferenz = team(4)\Tore - team(4)\gegentore
team(5)\name$ = "Team 5"
team(5)\punkte = 11
team(5)\Tore = 18
team(5)\Gegentore = 10
team(5)\Tordifferenz = team(5)\Tore - team(5)\gegentore
SortStructuredArray(Team(), 1, OffsetOf(Mannschaft\Tordifferenz), #PB_Sort_Word, 1, 5 )
SortStructuredArray(Team(), 1, OffsetOf(Mannschaft\Punkte), #PB_Sort_Word, 1, 5 )
Ausgabe_Tabelle()
Hat jemand vielleicht eine Idee, wie ich das Problem lösen kann oder wo mein Denkfehler ist?
Vielen Dank und viele Grüße
Oli
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Das wird kompliziert. Am besten legste zusätzlich eine structurierte Linkliste
an, die nur ein Identifiezierungsfeld, sowie die Tordifferenz enthält. Jetzt
mußte vor der Anzeige noch durch die 2 Liste iterieren um den besseren zu
finden, diesen entfernste dann gleich aus der linklist.
Ist etwas komplizierter, deswegen hab ich im Moment auch keine Lust, ein
Beispiel zu proggen, sry.
an, die nur ein Identifiezierungsfeld, sowie die Tordifferenz enthält. Jetzt
mußte vor der Anzeige noch durch die 2 Liste iterieren um den besseren zu
finden, diesen entfernste dann gleich aus der linklist.
Ist etwas komplizierter, deswegen hab ich im Moment auch keine Lust, ein
Beispiel zu proggen, sry.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- freedimension
- Admin
- Beiträge: 1987
- Registriert: 08.09.2004 13:19
- Wohnort: Ludwigsburg
- Kontaktdaten:
- HeX0R
- Beiträge: 3040
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3 - Kontaktdaten:
Du kannst auch mit SwapElements() arbeiten, und dir damit deine eigene Sortier-Funktion basteln.
Das wäre vermutlich einfacher
Das wäre vermutlich einfacher
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}.:|:.{Bier spendieren}