AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Liste Sortieren nach 2 Parametern

Ein Thema von franktron · begonnen am 26. Aug 2009 · letzter Beitrag vom 27. Aug 2009
Antwort Antwort
Seite 1 von 2  1 2   
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

Liste Sortieren nach 2 Parametern

  Alt 26. Aug 2009, 10:52
Ich möchte eine TList Sortieren und zwar habe ich folgende TList

Delphi-Quellcode:
PData = ^TData;
  TData = Record
    X,Y : Longint;
  End;
und ich will jetzt folgendes Ergebnis haben.

Y X
1 1
1 2
1 3
2 1
2 2
u.s.w

wie kann ich das machen.
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Liste Sortieren nach 2 Parametern

  Alt 26. Aug 2009, 11:01
Den Vergleichsalgorithmus entsprechend anpassen
Markus Kinzler
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#3

Re: Liste Sortieren nach 2 Parametern

  Alt 26. Aug 2009, 11:04
Zitat von mkinzler:
Den Vergleichsalgorithmus entsprechend anpassen
Da habe ich ja gerade ein Brett vorm Kopf und mir fällt nicht ein wie
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Liste Sortieren nach 2 Parametern

  Alt 26. Aug 2009, 11:09
Der Methode Tlist.Sort() kannst du eine Vergleichsfunktion mitgeben.
Markus Kinzler
  Mit Zitat antworten Zitat
fajac

Registriert seit: 1. Jul 2009
60 Beiträge
 
#5

Re: Liste Sortieren nach 2 Parametern

  Alt 27. Aug 2009, 08:04
Delphi-Quellcode:
function CompareData (Data1, Data2 : Pointer) : Integer
begin
  if PData(Data1)^.X = PData(Data2)^.X then
    begin
      if PData(Data1)^.Y = PData(Data2)^.Y then
        Result := 0
      else if PData(Data1)^.Y > PData(Data2)^.Y then
        Result := 1
      else
        Result := -1;
    end
  else if PData(Data1)^.X > PData(Data2)^.X then
    Result := 1
  else
    Result := -1;
end;
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Liste Sortieren nach 2 Parametern

  Alt 27. Aug 2009, 08:25
Oder etwas kompakter:
Delphi-Quellcode:
function CompareData (Data1, Data2 : Pointer) : Integer
begin
  Result := PData(Data1)^.X - PData(Data2)^.X;
  If Result = 0 Then
    Result := PData(Data1)^.Y - PData(Data2)^.Y;
end;
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#7

Re: Liste Sortieren nach 2 Parametern

  Alt 27. Aug 2009, 09:50
Danke für die Antworten ich habe das jetzt so gelöst

Delphi-Quellcode:
function CompareNamesY(Item1, Item2: PData): Integer;
begin
  Result:=Round(Item1^.Y+(1/Item1^.X)-Item2^.Y+(1/Item2^.X));
end;
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#8

Re: Liste Sortieren nach 2 Parametern

  Alt 27. Aug 2009, 10:55
@franktron: ... und das funktioniert? Ich dachte als Funktionsergebnis wird 1, 0 oder -1 erwartet! In deinem Fall könnten bei entsprechenden Y-Werten ja auch andere Ergebnisse zurückgeliefert werden.

Grundsätzlich sollte die "Berliner-Lösung" von alzaimar effizienter sein.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#9

Re: Liste Sortieren nach 2 Parametern

  Alt 27. Aug 2009, 11:08
Nein Es will nur "kleiner 0, 0 oder größer 0":
Delphi-Quellcode:
while SCompare(SortList^[I], P) < 0 do
  Inc(I);
while SCompare(SortList^[J], P) > 0 do
  Dec(J);
Zumindest unter Delphi 2009!

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#10

Re: Liste Sortieren nach 2 Parametern

  Alt 27. Aug 2009, 13:22
Zitat von franktron:
Danke für die Antworten ich habe das jetzt so gelöst

Delphi-Quellcode:
function CompareNamesY(Item1, Item2: PData): Integer;
begin
  Result:=Round(Item1^.Y+(1/Item1^.X)-Item2^.Y+(1/Item2^.X));
end;
Das kann doch gar nicht funktionieren! Für Item1^.X = 2, Item2^.X = 1, Item1^.Y = 1, Item2^.Y= 4 hat man round(1 + 0.5 - 4 + 1) = round(-1.5) < 0. Das Ergebnis sollte aber doch positiv sein, weil jaItem1^.X > Item2^.X ist. (Oder habe ich was übersehen?)

Gruß Gammatester
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 21:16 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