3-Dim-Array sortieren und eine Dimension kopieren
Moderator: Moderatoren
3-Dim-Array sortieren und eine Dimension kopieren
Hallo
ich habe einen Array mit 3 Dimensionen.
Aus diesem möchte ich nur die 3. Dimension als Ganzes in einen andern Array kopieren.
- ACopy kopiert aber nur die 1. Dimension,
- bei AEval habe ich noch nicht rausgefunden, wie man die 3. Dim. richtig anspricht und wie man es in einen andern Array überträgt.
- Die Kombination von AAdd mit AEval hat bisher noch nicht zum Ziel geführt.
- die Beispiele von Array to ListBox mit AddItem oder von AEval mit Qout konnte ich auch nicht anwenden.
Aber bestimmt gibt es eine gute Lösung ... - bin dankbar für einen Tipp
ich habe einen Array mit 3 Dimensionen.
Aus diesem möchte ich nur die 3. Dimension als Ganzes in einen andern Array kopieren.
- ACopy kopiert aber nur die 1. Dimension,
- bei AEval habe ich noch nicht rausgefunden, wie man die 3. Dim. richtig anspricht und wie man es in einen andern Array überträgt.
- Die Kombination von AAdd mit AEval hat bisher noch nicht zum Ziel geführt.
- die Beispiele von Array to ListBox mit AddItem oder von AEval mit Qout konnte ich auch nicht anwenden.
Aber bestimmt gibt es eine gute Lösung ... - bin dankbar für einen Tipp
Zuletzt geändert von Daniel am Mi, 05. Apr 2017 15:28, insgesamt 1-mal geändert.
- Martin Altmann
- Foren-Administrator
- Beiträge: 16555
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 115 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Eine Dimension aus Array kopieren
Daniel,
zeige doch mal den Source, den Du bisher hast - macht die Sache einfacher in der Erklärung!
Viele Grüße,
Martin
zeige doch mal den Source, den Du bisher hast - macht die Sache einfacher in der Erklärung!
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15706
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Eine Dimension aus Array kopieren
Ein Array (1. Dimension) kann auf ein anderes Array verweißen (2. Dimension) und aus diesem auf ein weiteres (3. Dimension).
ADim1[3] = wäre der Verweis auf des 3. Element der 1. Dimension
ADim1[3,6] = wäre der Verweis auf 6. Element der 2. Dimension innerhalb von dem 3. Element der 1. Dimension
Wenn nun ADim1[3,6] auf ein weiteres Array (3. Dimension) verweist, dann ist das auch die Adresse für dieses Array der 3. Dimension.
Wenn nun ADim1[3,6,1] wäre hingegen das 1. Element aus dem 6. Element aus dem 3. Element
AEval( aDim1 , ) würde alle Elemente der 1. Dimension abarbeiten ...
Ist es das was du meinst ?
Zeige doch mal die Daten (Array mit Daten) und denn was du genau vom einen im anderen willst.
PS: ich denke mit geschachtelten FOR NEXT Schleifen ist die Lösung am einfachsten zu verstehen und auch am flexibelsten umzusetzen.
ADim1[3] = wäre der Verweis auf des 3. Element der 1. Dimension
ADim1[3,6] = wäre der Verweis auf 6. Element der 2. Dimension innerhalb von dem 3. Element der 1. Dimension
Wenn nun ADim1[3,6] auf ein weiteres Array (3. Dimension) verweist, dann ist das auch die Adresse für dieses Array der 3. Dimension.
Wenn nun ADim1[3,6,1] wäre hingegen das 1. Element aus dem 6. Element aus dem 3. Element
AEval( aDim1 , ) würde alle Elemente der 1. Dimension abarbeiten ...
Ist es das was du meinst ?
Zeige doch mal die Daten (Array mit Daten) und denn was du genau vom einen im anderen willst.
PS: ich denke mit geschachtelten FOR NEXT Schleifen ist die Lösung am einfachsten zu verstehen und auch am flexibelsten umzusetzen.
Gruß
Hubert
Hubert
Re: Eine Dimension aus Array kopieren
Hallo Martin
ja gut, viel ist es nicht, was das Problem selber betrifft.
aAbos ist der Array mit 3 Dimensionen. Die andern Dimensionen brauche ich zum Sortieren. Das scheint soweit zu funktionieren.
- Danke, Hubert
- ich mach gleich noch ein besseres Beispiel mit Musterdaten.
ja gut, viel ist es nicht, was das Problem selber betrifft.
aAbos ist der Array mit 3 Dimensionen. Die andern Dimensionen brauche ich zum Sortieren. Das scheint soweit zu funktionieren.
Code: Alles auswählen
*aADD( aArray, AEval( aAbos, {|x,i| aAbos[i,3] } ) ) // übernimmt Alles, statt nur das 3. Elem.!
aADD( aArray, AEval( aAbos, {|a| a[3] } ) ) // übernimmt Alles! // Bsp. AEval
- ich mach gleich noch ein besseres Beispiel mit Musterdaten.
- Martin Altmann
- Foren-Administrator
- Beiträge: 16555
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 115 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Eine Dimension aus Array kopieren
Moin Daniel,
was Du da zeigst, ist kein Dreidimensinales Array - es ist ein Array, das weitere Arrays enthält (zweidimensional, wie ein Schachbrett).
Du möchtest scheinbar aus jeder Zeile des Arrays die dritte Spalte haben - ist das so richtig verstanden?
Viele Grüße,
Martin
was Du da zeigst, ist kein Dreidimensinales Array - es ist ein Array, das weitere Arrays enthält (zweidimensional, wie ein Schachbrett).
Du möchtest scheinbar aus jeder Zeile des Arrays die dritte Spalte haben - ist das so richtig verstanden?
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Martin Altmann
- Foren-Administrator
- Beiträge: 16555
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 115 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Eine Dimension aus Array kopieren
Wenn die dritte Spalte jedoch als Element ein Array enthält, musst du dieses mit Aclone in das neue Zielarray übernehmen!
Viele Grüße,
Martin
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Re: Eine Dimension aus Array kopieren
Also, ich habe folgende Daten aus einer DBF:
nSort1, nSort2, cString
cString ist aus mehreren Feldern zusammengesetzt.
Die Daten aus einer Selektion übernehme ich in einen Array aAbos:
Jetzt möchte ich die sortierten Daten von cString herauskopieren, um sie nachher anzuzeigen.
nSort1, nSort2, cString
cString ist aus mehreren Feldern zusammengesetzt.
Die Daten aus einer Selektion übernehme ich in einen Array aAbos:
Code: Alles auswählen
DO WHILE KundenNr = nKunde
aADD( aAbos, { str( nSort1,8), str( nSort2,1), cString } )
DbSkip()
EndDO
ASort( aAbos,,, {|aX,aY| aX[1] > aY[1] } ) // zuerst absteigend nach nSort1
ASort( aAbos,,, {|aX,aY| aX[2] > aY[2] } ) // dann absteigend nach nSort2
- Martin Altmann
- Foren-Administrator
- Beiträge: 16555
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 115 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Eine Dimension aus Array kopieren
Probiere mal:
Viele Grüße,
Martin
Code: Alles auswählen
AEval( aAbos, {|a| aADD( aArray, a[3] ) } )
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Re: Eine Dimension aus Array kopieren
Danke, Martin
Habe es probiert, und es scheint zu klappen.
Allerdings zeigt sich, dass das mit der doppelten Sortierung so nicht geht (habe ich fast befürchtet), weil die zweite Sortierung offenbar die erste aufhebt (?).
Vielleicht muss ich nach der ersten Sortierung den Array klonen?
- das läuft noch nicht auf Anhieb, ich probiere da noch weiter.
Habe es probiert, und es scheint zu klappen.
Allerdings zeigt sich, dass das mit der doppelten Sortierung so nicht geht (habe ich fast befürchtet), weil die zweite Sortierung offenbar die erste aufhebt (?).
Vielleicht muss ich nach der ersten Sortierung den Array klonen?
- das läuft noch nicht auf Anhieb, ich probiere da noch weiter.
Zuletzt geändert von Daniel am Mi, 05. Apr 2017 13:06, insgesamt 1-mal geändert.
- Martin Altmann
- Foren-Administrator
- Beiträge: 16555
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 115 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Eine Dimension aus Array kopieren
Sorry,
das hatte ich nicht für wichtig erachtet: Du musst innerhalb eines Schrittes sortieren und dabei prüfen, ob die Werte in der 1. Spalte identisch sind, dann wird nach der zweiten Spalte sortiert - sonst nach der ersten:
Viele Grüße,
Martin
das hatte ich nicht für wichtig erachtet: Du musst innerhalb eines Schrittes sortieren und dabei prüfen, ob die Werte in der 1. Spalte identisch sind, dann wird nach der zweiten Spalte sortiert - sonst nach der ersten:
Code: Alles auswählen
asort( aAbos,,, {|aX,aY| iif( aX[ 1 ] <> aY[ 1 ], aX[ 1 ] > aY[ 1 ], aX[ 2 ] > aY[ 2 ] ) } )
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Re: Eine Dimension aus Array kopieren
Das geht auch einfacher:
Sortiert wird dann nach Spalte 1, innerhalb von Spalte 1 aber nach Spalte 2.
Code: Alles auswählen
ASort( aAbos,,, {|aX,aY| aX[1]+aX[2] > aY[1]+aY[2] } )
Herzlich,
Tom
Tom
- Martin Altmann
- Foren-Administrator
- Beiträge: 16555
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 115 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Eine Dimension aus Array kopieren
Tom,
in dem Fall schon, da hast Du Recht.
Viele Grüße,
Martin
in dem Fall schon, da hast Du Recht.
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Re: 3-Dim-Array sortieren und eine Dimension kopieren
Prima, besten Dank Euch beiden!
Das läuft jetzt tipptopp.
Das läuft jetzt tipptopp.
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: 3-Dim-Array sortieren und eine Dimension kopieren
angenommen du hast ein DbStruct() Array und willst nur die Feld NamenDaniel hat geschrieben:bei AEval habe ich noch nicht rausgefunden, wie man die 3. Dim. richtig anspricht und wie man es in einen andern Array überträgt.
Code: Alles auswählen
// only Fieldnamen
aArray := AEVAL( aStruc, {|a| a := a[F_NAME] },,, .T. )
// Choise Fields
aArray := PickList (oOwner, aArray, "Picklist Dialog" )
gruss by OHR
Jimmy
Jimmy
Re: 3-Dim-Array sortieren und eine Dimension kopieren
hallo Jimmy
danke für den Tipp! Das ist interessant, die Picklist muss ich mal ausprobieren.
danke für den Tipp! Das ist interessant, die Picklist muss ich mal ausprobieren.