AGB  ·  Datenschutz  ·  Impressum  







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

2 dimensionales Array sortieren die X'te...

Ein Thema von Satyr · begonnen am 14. Aug 2012 · letzter Beitrag vom 15. Aug 2012
Antwort Antwort
Satyr

Registriert seit: 8. Feb 2012
Ort: Essen
305 Beiträge
 
Delphi 10.4 Sydney
 
#1

2 dimensionales Array sortieren die X'te...

  Alt 14. Aug 2012, 19:34
Guten Abend,

ich hab nen Knoten im Hirn. Ich will einfach nur ein 2Dimensionales Array nach der 2. Dimension sortieren. Beim Googlen fand ich viel dazu... aber leider nichts was ich verstehe. Das meiste war entweder für Strings gedacht oder sah mir zu aufwändig aus, für die kleine Sache.
Mein Array ist dynamisch und recht einfach:

meinArray : Array of Array of Integer; es werden 2 Felder benutzt und mit Zahlen gefüllt:

Delphi-Quellcode:
meinArray[z][1] := StrToInt(beispielzahl1);
meinArray[z][2] := StrToInt(beispielzahl2);
Klappt bis hierhin wie es soll. Array wird gefüllt, kann ausgelesen werden... aber wie ich es nach dem zweiten Feld sortiere verstehe ich nicht.

Mit BubbleSort soll das einfach sein, las ich. Aber ich weiß nicht wie ich das auf meinen Fall anwende...

Gruß,
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

AW: 2 dimensionales Array sortieren die X'te...

  Alt 14. Aug 2012, 19:49
Sortieren benötigt immer 2 Grundoperationen: Vergleichen (Compare) und Vertauschen (Swap)
Versuche 2 Funktionen zu schreiben:
Delphi-Quellcode:
function CompareMyArray(a,b:integer):integer;
const
  VERGLEICHINDEX = 0;
begin
  if meinArray[VERGLEICHINDEX][a] > meinArray[VERGLEICHINDEX][b] then
    result := 1
  else if meinArray[VERGLEICHINDEX][a] > meinArray[VERGLEICHINDEX][b] then
    result := -1
  else
    result := 0;
   // Hinweis: mit Sign() geht es einfacher und eleganter
end;

procedure SwapMyArray(a,b:integer);
var i : integer;
begin
  for i := 0 to obergrenze do
    SwapInteger(meinArray[i][a], meinArray[i][b]);
end;
Damit kannst du nun beliebige Sortierverfahren ansetzen, die CompareXXXX() oder SwapXXXX() benützen.
  Mit Zitat antworten Zitat
Satyr

Registriert seit: 8. Feb 2012
Ort: Essen
305 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: 2 dimensionales Array sortieren die X'te...

  Alt 14. Aug 2012, 19:56
Danke, das hilft schonmal die Logik ein wenig besser zu verstehen.
Allerdings hab ich das Array nicht global definiert. Es ist nur in einer kleiner Funktion existent, weil es nichts großes macht.
Kann ich das Array irgendwie an die beiden Funktionen übergeben?
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

AW: 2 dimensionales Array sortieren die X'te...

  Alt 14. Aug 2012, 20:03
Wenn du dem Array ein Typ gibst kannst du es auch durchreichen:
Delphi-Quellcode:
Type
 Tmein2DArray = Array of Array of Integer;

// und später
meinArray : Tmein2DArray;

function CompareMyArray(X:Tmein2DArray;a,b:integer):integer;
const
  VERGLEICHINDEX = 0;
begin
  if X[VERGLEICHINDEX][a] > X[VERGLEICHINDEX][b] then
    result := 1
  else if X[VERGLEICHINDEX][a] > X[VERGLEICHINDEX][b] then
    result := -1
  else
    result := 0;
   // Hinweis: mit Sign() geht es einfacher und eleganter
end;
Noch besser wäre es, wenn du das Array sammt Compare-, Swap- und Sortierfunktion in einer Klasse verpacken würdest.
  Mit Zitat antworten Zitat
Satyr

Registriert seit: 8. Feb 2012
Ort: Essen
305 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: 2 dimensionales Array sortieren die X'te...

  Alt 14. Aug 2012, 20:07
Man, das klingt irgendwie aufwändiger als ich es von PHP kenne *g*.
Danke Dir, ich werde morgen weiter versuchen das hinzubekommen. Ich hätte nicht gedacht das es so ein Aufwand ist "mal eben" ein Array zu sortieren.
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#6

AW: 2 dimensionales Array sortieren die X'te...

  Alt 14. Aug 2012, 21:11
sx, das geht aber so einfacher:

Delphi-Quellcode:
type
  TIntArray = Array of Integer;
  TInt2DArray = Array of TIntArray;

var
  meinArray : TInt2DArray;

  i := <irgendEinIndex>;
  IrgendEineSortFunktionDieEinIntArrayAnnimmt(meinArray[i]);
Zitat:
Danke Dir, ich werde morgen weiter versuchen das hinzubekommen. Ich hätte nicht gedacht das es so ein Aufwand ist "mal eben" ein Array zu sortieren.
es ist eig. gar kein Aufwand..
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz