AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Listenobjekte sortieren

Ein Thema von schuetzejanett · begonnen am 17. Jan 2007 · letzter Beitrag vom 4. Dez 2008
Antwort Antwort
Seite 1 von 2  1 2      
schuetzejanett

Registriert seit: 5. Apr 2006
Ort: Fraureuth
62 Beiträge
 
#1

Listenobjekte sortieren

  Alt 17. Jan 2007, 20:35
hallo,

ich habe eine Klasse Playercollection die Player in einer liste speichert
Eine eigenschaft der Klasse Player ist der integerwert score.
Nun wollte ich die einzelnen Spieler nach den Punkten(score) sortieren.

Dafür habe ich gedacht ich speichere die Player in einem array und wende auf dieses array ein sortierverfahren an.

Allerdings komme ich nun etwas durcheinander, wenn ich den quicksort anwende da ich immernur die punkte ändere aber nicht die player genau.
Wie sortiere ich also die punkte und nicht nur den punktestand?

Delphi-Quellcode:
procedure TPlayerCollection.SortScores(var field : Array of TPlayer) ;
var i : integer;
begin
  getField(field); //feld änhält Playerobjekte
  quicksort(field, 0, self.Count-1);
end;

procedure TPlayerCollection.quicksort(var Field: array of TPlayer; ilow,
  ihigh: integer);
var
   Low, High, Mid, T: Integer;
 begin
   Low := iLow;
   High := iHigh;
   Mid := Field[(Low + High) div 2].score;
   repeat
     while Field[Low].score < Mid do Inc(Low);
     while Field[High].score > Mid do Dec(High);
     if (Low <= High) then
     begin
       T := Field[Low].score;
       Field[Low].score := Field[High].score;
       Field[High].score := T;
       Inc(Low);
       Dec(High);
     end;
   until Low > High;
   if High > iLow then QuickSort(Field, iLow, High);
   if Low < iHigh then QuickSort(Field, Low, iHigh);
end;
oder würdet ihr mir ein anderes Suchverfahren empfeheln, da es sich um höchstens 10 Playerobjekte handelt die sortiert werden müssten.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Listenobjekte sortieren

  Alt 17. Jan 2007, 21:05
Wieso ein noch mal ein Array? Du hast doch schon alle Spieler in eine Objektlist. Schreib dir doch einfach eine Methode, die dir diese Liste sortiert. Wenn du deine Objektliste von TList abgeleitet hast, dann kannst du die Methode Exchange nutzen, um zwei Items zu vertauschen. Ein einfaches BubbelSort sollte reichen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
schuetzejanett

Registriert seit: 5. Apr 2006
Ort: Fraureuth
62 Beiträge
 
#3

Re: Listenobjekte sortieren

  Alt 17. Jan 2007, 21:25
danke für den Tipp, an die Möglichkeit habe ich gar nicht gedacht.
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi
Online

Registriert seit: 17. Jul 2005
847 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Listenobjekte sortieren

  Alt 17. Jan 2007, 21:43
Eine TList oder TObjectlist hat auch eine Methode Sort. Dafür muss man nur eine Compare-Funktion angeben. Ein Beispiel wäre evtl. so:
Delphi-Quellcode:
// Eine Compare-Funktion könnte so aussehen
function ScoreSort(item1,item2:pointer):integer;
begin
    result := TPlayer(item1).score <= TPlayer(item2).Score;
end;

// Aufruf geht dann so
Playlist.Sort(ScoreSort);
  Mit Zitat antworten Zitat
mojo777

Registriert seit: 10. Sep 2003
402 Beiträge
 
#5

Re: Listenobjekte sortieren

  Alt 23. Jun 2007, 19:00
Delphi-Quellcode:
// Aufruf geht dann so
Playlist.Sort(@ScoreSort);
Muh macht die kUh
  Mit Zitat antworten Zitat
Tod787

Registriert seit: 19. Mai 2008
99 Beiträge
 
#6

Re: Listenobjekte sortieren

  Alt 4. Dez 2008, 07:15
Hi, habe ein ähnliches Problem allerdings hab ich das nicht ganz verstanden. Ich suche eine Funktion mit der ich aus meiner Objektliste das Objekt bestimmen kann, welches den kleinsten Wert im Atribut "Größe: Single" besitzt.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Listenobjekte sortieren

  Alt 4. Dez 2008, 07:24
Wenn du das öfterst brauchst -> Liste nach diesem Feld sortieren, sonst durch liste gehen und kleinsten Wert und dessen Objekt merken
Markus Kinzler
  Mit Zitat antworten Zitat
Relicted

Registriert seit: 24. Jan 2006
Ort: Iserlohn
646 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Listenobjekte sortieren

  Alt 4. Dez 2008, 07:26
wenn du nur den kleinsten Wert haben willst ohne die Liste zu sortieren dann:

Delphi-Quellcode:
var
  coKleinsterEintrag : TDeineKlasse;


if Self.Count > 0 then
  coKleinsterEintrag := Self.Items[0];

for i := 0 to Self.Count - 1 do
begin
  if Self.Items[i].Wert < coKleinsterEintrag.Wert then
    coKleinsterEintrag := Self.Items[i];
end;
so aufrufen wenn du dich innerhalb der Liste befindest, wenn du ausserhalb die Bestimmung durchführen willst dann das "Self." durch deine Objectlist ersetzen.

Gruß
reli
  Mit Zitat antworten Zitat
Tod787

Registriert seit: 19. Mai 2008
99 Beiträge
 
#9

Re: Listenobjekte sortieren

  Alt 4. Dez 2008, 08:02
Also ich hab das mal versucht bei mir zu übertragen allerdings funktioniert das noch nicht so richtig. Bei der If-Abfrage kommt eine Fehlermeldung dass bei MyObjectlist.Items[i].Groesse das Feld .Groesse nicht deklariert wäre.

Delphi-Quellcode:
function TMyClass.GetNextGroesse: TMyObject;
var i: Integer; coKleinsteGroesse : TMyObject;
begin
  if MyObjectlist.Count > 0 then
    coKleinsteGroesse := TMyObject(MyObjectlist.Items[0]);

  for i := 0 to MyObjectlist.Count - 1 do
    begin
      if MyObjectlist.Items[i].Groesse < coKleinsteGroesse.Groesse then
        coKleinsteGroesse := MyObjectlist.Items[i];
    end;
  result := KleinsteGroesse;
end;
Edit:

mit if TMyObject(MyObjectlist.Items[i]).Groesse < coKleinsteGroesse.Groesse then geht es jetzt
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Listenobjekte sortieren

  Alt 4. Dez 2008, 08:05
Und beiTMyObject(MyObjectlist.Items[i]).Groesse ?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz