AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Mehrdimensionales Array (Array of array) sortieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mehrdimensionales Array (Array of array) sortieren

Ein Thema von Ykcim · begonnen am 7. Dez 2009 · letzter Beitrag vom 7. Dez 2009
Antwort Antwort
Seite 1 von 2  1 2      
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
804 Beiträge
 
Delphi 10.4 Sydney
 
#1

Mehrdimensionales Array (Array of array) sortieren

  Alt 7. Dez 2009, 09:18
Hallo Zusammen,

ich habe ein für mich nicht lösbares Problem. Auch wenn ich einige Sachen gefunden habe, konnte ich sie nicht so nachvollziehen, dass ich sie hätte verwenden können, daher habt bitte Geduld mit mir.

Ich als Ergebnis einer SQL-Abfrage ein Array of array. Dieses muss ich jetzt sortiert bekommen und ich weiß nicht einmal, wie ich anfangen soll.

Hier mal ein Beispiel, wie das Array aussieht:

ArtikelNr - Lieferdatum - Menge - Kunde
4711 - 15.12.2009
4822 - 14.12.2009
4822 - 12.12.2009
4822 - 10.01.2010
4711 - 10.12.2009
4711 - 18.12.2009
4822 - 30.01.2010
4711 - 29.01.2010

Und so weiter. Das Array kann durchaus 40.000 Datensätze enthalten.

Ich möchte es jetzt so sortieren, dass das Ergebnis wie folgt aussieht:

ArtikelNr - Lieferdatum - Menge - Kunde
4711 - 10.12.2009
4711 - 15.12.2009
4711 - 18.12.2009
4711 - 29.01.2010
4822 - 12.12.2009
4822 - 14.12.2009
4822 - 10.01.2010
4822 - 30.01.2010

=> Also immer nach ArtikelNr sortiert und innerhalb nach Datum sortiert.

Könnt Ihr mir bei der Bewältigung dieser Aufgabe helfen?

Vielen Dank im Voraus

Ykcim

[edit=alzaimar] Weckstabenverbuchselung im Header korrigiert. Mfg, alzaimar[/edit]
Patrick
  Mit Zitat antworten Zitat
schlecki

Registriert seit: 11. Apr 2005
Ort: Darmstadt
148 Beiträge
 
Delphi XE2 Enterprise
 
#2

Re: Mherdimensionales Array (Array of array) sortieren

  Alt 7. Dez 2009, 09:22
Zitat von Ykcim:
{...} SQL-Abfrage ein Array of array. Dieses muss ich jetzt sortiert{...}
=> Also immer nach ArtikelNr sortiert und innerhalb nach Datum sortiert.
Hallo,

Eine SQL-Abfrage liefert normalerweise ein Recordset. Dieses kannst auch schon mit SQL formatieren lassen.

Ergänze deine Abfrage einfach (etwa so):

select * from <TABLE> where ... order by ARTNR, DATUM Damit sollte die Reihenfolge wie gewünscht sein

Gruß
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.157 Beiträge
 
Delphi 12 Athens
 
#3

Re: Mherdimensionales Array (Array of array) sortieren

  Alt 7. Dez 2009, 09:24
Du gehst das Haauptarray durch, vergleichst jeweils die ArtikelNr und sortierst es danach,
so wie man es sonst mit einem normalem Array auch macht.
Oder (wie schon gesagt) du läßt dir das Array gleich sortiert geben.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
804 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Mherdimensionales Array (Array of array) sortieren

  Alt 7. Dez 2009, 09:32
Hallo,

vielen Dank für die schnellen Antworten!

Wenn ich den MySQL-Server die Sortierung vornehmen lasse, dann dauert das gut und gerne 7-8 Sekunden. Da die Funktion häufig verwendet wird, ist das mehr als ich tolleriert wird...

Daher wollte ich es nicht über den MYSQL-Server machen lassen...

Wenn ich das HauptArray durchgehe und nach Artikelnummern vergleiche, dann bekomme wahrscheinlich (ich habe noch nie ein Array sortiert) das Array nach Artikelnummern sortiert, aber nicht auch nach Lieferdatum...

Würde es dann nicht so aussehen?

ArtikelNr - Lieferdatum - Menge - Kunde
4711 - 15.12.2009
4711 - 10.12.2009
4711 - 18.12.2009
4711 - 29.01.2010
4822 - 14.12.2009
4822 - 12.12.2009
4822 - 10.01.2010
4822 - 30.01.2010

Ykcim
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.157 Beiträge
 
Delphi 12 Athens
 
#5

Re: Mherdimensionales Array (Array of array) sortieren

  Alt 7. Dez 2009, 09:45
Hast du je einen Index auf den zu sortierenden Feldern liegen?

'ne einfache Sortierung eines solchen Arrays ginge z.B. so
Delphi-Quellcode:
Type TArr = Array of String;
  TArrArr = Array of TArr;

Var i, k: Integer:
  Temp: TArr;
  Arr: TArrArr;

For i := 0 to High(Arr) - 1 do
  For k := i + 1 to High(Arr) do
    If (Arr[i].ArtikelNr > Arr[k].ArtikelNr) or ((Arr[i].ArtikelNr ) Arr[k].ArtikelNr)
        and (Arr[i].Lieferdatum > Arr[k].Lieferdatum)) Then Begin
      Temp := Arr[i];
      Arr[i] := Arr[k];
      Arr[k] := Temp;
    End;
Dieses kann man dann auch auf QuickSort und Co. anwenden, fals es immernoch zu langsam ist.

PS: es gab dieses Jahr schonmal so'nen Sortierthread, auch wenn ich ihn grad einfach nicht finden kann.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
804 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Mherdimensionales Array (Array of array) sortieren

  Alt 7. Dez 2009, 09:58
Hallo,

Was meinst Du mit Index auf den zu sortierenden Feldern? Die Tabelle, aus die Daten kommen, wird mindestens einmal am Tag gellert und mit aktuellen Daten aus dem PPS System gefüllt...


Ich hatte schon einmal überlegt, dass ich vielleicht in zwei Steps arbeiten muss. Erst das Array nach Lieferdatum sortieren, was dann so aussehen könnte:

ArtikelNr - Lieferdatum - Menge - Kunde
4711 - 10.12.2009
4822 - 12.12.2009
4822 - 14.12.2009
4711 - 15.12.2009
4711 - 18.12.2009
4822 - 10.01.2010
4711 - 29.01.2010
4822 - 30.01.2010

Und dann im zweiten Step nach ArtikelNr sortieren, was dann hoffentlich so aussehen würde:

ArtikelNr - Lieferdatum - Menge - Kunde
4711 - 10.12.2009
4711 - 15.12.2009
4711 - 18.12.2009
4711 - 29.01.2010
4822 - 12.12.2009
4822 - 14.12.2009
4822 - 10.01.2010
4822 - 30.01.2010

Ich weiß aber nicht genau, wie die Funktionsweise bei Sortieren eine Arrays funktioniert - ich habe es leider bei den Beispielen, die ich gefunden habe noch nicht hachvollziehen können...

Ich gucke mal, dass ich durch den letzten Beitrag durchsteige...

Ykcim
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.157 Beiträge
 
Delphi 12 Athens
 
#7

Re: Mherdimensionales Array (Array of array) sortieren

  Alt 7. Dez 2009, 10:02
Wenn die Felder in der DB einen Index haben, dann sollte das Sortieren schneller gehn

Eventuell läßt sich die Tabelle auch gleich sortiert anlegen?


Zitat:
Ich hatte schon einmal überlegt, dass ich vielleicht in zwei Steps arbeiten muss.
muß man nicht ... man muß nur die Sortierkriterien entsprechend verknüpfen (siehe das IF im Beispiel)

http://www.delphipraxis.net/internal...%20of%20record
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
804 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Mherdimensionales Array (Array of array) sortieren

  Alt 7. Dez 2009, 10:16
Entschuldige,

ich versuche gerade Deinen Code in mein Programm zu übersetzen.

Kann es sein, dass hier ein Vergleichszeichen fehlt?

Delphi-Quellcode:
If (Arr[i].ArtikelNr > Arr[k].ArtikelNr) or ((Arr[i].ArtikelNr ) ??? Arr[k].ArtikelNr)
        and (Arr[i].Lieferdatum > Arr[k].Lieferdatum)) Then Begin
Ich rate mal: "="?

Danke
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.157 Beiträge
 
Delphi 12 Athens
 
#9

Re: Mherdimensionales Array (Array of array) sortieren

  Alt 7. Dez 2009, 10:24
ups ... ja, das ) ist ein =

Delphi-Quellcode:
If (Arr[i].ArtikelNr > Arr[k].ArtikelNr) or ((Arr[i].ArtikelNr = Arr[k].ArtikelNr)
    and (Arr[i].Lieferdatum > Arr[k].Lieferdatum)) Then Begin
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
804 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Mherdimensionales Array (Array of array) sortieren

  Alt 7. Dez 2009, 11:03
Hallo,

was heißt eigentlich das
Delphi-Quellcode:
If (Arr[i].ArtikelNr > Arr[k].ArtikelNr) or ((Arr[i].ArtikelNr = Arr[k].ArtikelNr)
    and (Arr[i].Lieferdatum > Arr[k].Lieferdatum)) Then Begin
Genaugenommen das Arr[i].ArtikelNr ? Ich habe es umgeschrieben in
Delphi-Quellcode:
If (Rows7[0,i] > Rows7[0,k]) or ((Rows7[0,i] = Rows7[0,k])
        and (Rows7[1,i] > Rows7[1,k])) Then Begin
weil ich darüber die Splaten ansteuer.

Rows7 ist ein
Delphi-Quellcode:
TCols = array of string;
TRows = array of TCols;
.

Nur dummerweise passiert nichts, wenn ich die Procedure durchführe... der Bereich und die IF-Schleife werden zwar durchlaufen, aber am Ergebnis sehe ich keine Veränderung...

So sieht mein Code aus:
Delphi-Quellcode:
Cols7:=Cols2;
  Rows7:=Rows2;

  For i := 0 to High(Rows7) - 1 do
  For k := i + 1 to High(Rows7) do
    If (Rows7[0,i] > Rows7[0,k]) or ((Rows7[0,i] = Rows7[0,k])
        and (Rows7[1,i] > Rows7[1,k])) Then Begin
      Cols6 := Rows7[i];
      Rows7[i] := Rows7[k];
      Rows7[k] := Cols6;
    End;

  Cols2:=Cols7;
  Rows2:=Rows7;
  FillGrid(SG2, Cols7, Rows7);
Habe ich da einen Denkfehler?

Danke
Ykcim
Patrick
  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 05:52 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