Sortierung eines 2-dimensionalen Arrays nach der zweiten Dimension - Seite 2

 

Hey Gordon, danke für die Vorwarnung, beim Lesen dieses Codes, wurde ich daran erinnert, dass ich bereits einen Code-Snippet, dass Schleifen durch den Korb, um die größte Verlierer Handel zu finden, könnte ich es mit einem Klon von ihm gekoppelt umgekehrt, um den größten Gewinner zu finden, es Gewinner ist größer als Verlierer, dann kann ich jede schließen. Das funktioniert für meinen Bedarf. Manchmal ist es der beste Codegenerator von allen, wenn man einfach darüber schläft. Verdammt, ich könnte das wahrscheinlich über Nacht programmieren. Keine große Änderung. Ich muss sie nicht alle auf einmal schließen lassen. Wir gehen es beim ersten Mal durch, und beim nächsten Tick oder bei der nächsten Kerze können wir es noch einmal durchgehen, oder wie ich schon sagte, habe ich eine andere Funktion, die zur gleichen Zeit ausgelöst wird, und so etwas wäre praktisch. Ich kann es einfach in die Codierung dieser Funktion einbetten.

Vielen Dank für den Augenöffner, Gordon.

 

Wenn Sie die Arrays nach dem Preis sortieren möchten, laden Sie einfach den Preis in die erste Dimension und das Ticket in die zweite Dimension......und sortieren Sie sie dann auf normale Weise.

 

Ja, daran wurde bereits gedacht. Kopieren Sie dann einfach die Daten in ein anderes Array in umgekehrter Anordnung, um wieder in die andere Richtung zu sortieren. Was ich zu tun beschlossen, war viel einfacher und tatsächlich passen meine Bedürfnisse viel besser. Ich mache eine Schleife durch die offenen Trades und finde den größten Gewinner und den größten Verlierer, der kleiner ist als der größte Gewinner, dann schließe ich beide. Beim nächsten Tick oder der nächsten Kerze wird der Vorgang wiederholt. Das hat sich als sehr gut erwiesen.

 
gordon:

Unabhängig davon, wie Sie es nennen möchten, ist die erste Dimension in einem 2D-Array der Vektor arr_name[0,1,...,n][0], so dass technisch gesehen die erste Klammer die erste Dimension enthält; dies ist auch der Vektor, der von ArraySort() sortiert wird. Aus dem Buch:

Wenn wir schon beim Thema ArraySort() sind, möchte ich noch 2 undokumentierte Besonderheiten erwähnen, die ich im Laufe der Zeit gefunden habe (und würde mich freuen, wenn mich jemand bestätigt oder korrigiert...?):

  1. Wenn einige der Elemente in der ersten Dimension identisch sind, behalten sie nicht unbedingt ihre Reihenfolge bei. Offensichtlich sollte dies dokumentiert werden, wenn es 'by-design' ist, andernfalls würde ich dies als 'Bug' betrachten.
  2. OrderSort() funktioniert nicht mit 4D-Arrays (gibt Fehler 4053 zurück). Auch dies sollte dokumentiert sein, ist es aber nicht.
Entschuldigung für die verspätete Antwort, Leute... viele Dinge kamen dazwischen. Ich versichere euch, dass ich eure Antworten sehr zu schätzen weiß.
FWIW dies sind meine Antworten (im 'spammy' Modus :( ) :
- Bei 1D-Arrays stellt sich keine Frage. Bei 2D-, 3D- und 4D-Feldern ist das äußerste linke Klammerpaar immer die erste Dimension, ist das richtig, Gordon?
 
cameofx:
- Bei 1D-Feldern stellt sich diese Frage nicht. Bei 2D-, 3D- und 4D-Feldern ist das äußerste linke Klammerpaar immer die erste Dimension, stimmt das, Gordon?

Ja.

 
gordon:

Unabhängig davon, wie Sie es nennen möchten, ist die erste Dimension in einem 2D-Array der Vektor arr_name[0,1,...,n][0], so dass technisch gesehen die erste Klammer die erste Dimension enthält; dies ist auch der Vektor, der von ArraySort() sortiert wird. Aus dem Buch:

Wenn wir schon beim Thema ArraySort() sind, möchte ich noch 2 undokumentierte Besonderheiten erwähnen, die ich im Laufe der Zeit gefunden habe (und würde mich freuen, wenn mich jemand bestätigt oder korrigiert...?):

  1. Wenn einige der Elemente in der ersten Dimension identisch sind, behalten sie nicht unbedingt ihre Reihenfolge bei. Offensichtlich sollte dies dokumentiert werden, wenn es 'by-design' ist, andernfalls würde ich dies als 'Bug' betrachten.
  2. OrderSort() funktioniert nicht mit 4D-Arrays (gibt Fehler 4053 zurück). Auch dies sollte dokumentiert sein, ist es aber nicht.
Entschuldigung für die verspätete Antwort, Leute... viele Dinge kamen dazwischen. Ich versichere euch, dass ich eure Antworten sehr zu schätzen weiß.
FWIW dies sind meine Antworten:
- Bei 1D-Arrays stellt sich keine Frage. Bei 2D-, 3D- und 4D-Arrays ist das linke Klammerpaar immer die erste Dimension. Das ist auch mein Verständnis.
int    a[50];       // A one-dimensional array of 50 integers.
double m[7][50];    // Two-dimensional array of seven arrays,
                    //each of them consisting of 50 integers
Aber wenn ich mir diese Erklärung anschaue, dann ist das eine andere Sache. Die Beschreibung lautet : "Zweidimensionales Array mit sieben Arrays, von denen jedes aus 50 ganzen Zahlen besteht" Wenn ich darüber nachdenke und Ihre Antworten sehe... Dies muss
eine fehlerhafte Erklärung sein, denn sie suggeriert, dass die 50 ganzen Zahlen eher die Zeilen-/Mitgliedergröße der Daten sind und 7 die Spalte/Kopfzeile. Dies führte mich zu der (irrtümlichen) Annahme
die rechte Seite sei der Teil der Zeile/des Mitglieds, dessen Größe wir bequem ändern sollten/können...
- Ich weiß es zu schätzen, dass Sie Ihre Erkenntnisse mit mir teilen, Gordon. Leider ist das Testen in diesen Tagen ein Luxus für mich... Ich komme nur sporadisch an Computer und Internet heran (es ist kompliziert).
Selbst das Testen auf einer toten Karte erweist sich als Herausforderung... :( . Daher auch mein manchmal "verdrehtes Verständnis". Ehrlich gesagt, verlasse ich mich meistens auf mein Gedächtnis und Referenzen...(sorry..).

PS: Ups... ich wusste nicht, dass der frühere Beitrag angekommen ist. Ich habe ihn editiert.
 
cameofx:
[...] Dies muss eine fehlerhafte Erklärung sein, denn sie legt nahe, dass die 50 ganzen Zahlen eher die Zeilen-/Mitgliedergröße der Daten und 7 die Spalten-/Kopfzeile sind.

Ich bin mir nicht sicher, was damit gemeint ist, aber auf jeden Fall ist die am weitesten links stehende die erste Dimension. Ein großer Teil der Dokumentation ist eine Übersetzung aus dem Russischen, oft keine sehr gute Übersetzung, vielleicht ist dies einer dieser Fälle. Das mit den Spalten und Zeilen ist nur eine Metapher, die es uns erleichtert, uns das Array vorzustellen, aber nichts mit der tatsächlichen Implementierung zu tun hat. Ob die erste Dimension eine 'Zeile' oder eine 'Spalte' ist, bleibt Ihnen überlassen...

 
1005phillip:


Ich betrachte die Indizierung und Dimensionierung von Arrays in der üblichen Tabellenkalkulationsweise: Zeile-Spalte (Eselsbrücke "römisch-katholisch").

1D-Array: MeinArray[Zeilennummer-1]

2D-Array: MyArray[RowNumber-1][ColumnNumber-1]

3D-Array: MyArray[RowNumber-1][ColumnNumber-1][Worksheet-1] ....

So habe ich es mir auch vorgestellt. Der von mir zitierte Hinweis auf die erste Dimension hat mich verwirrt (siehe obigen Beitrag). Wir können also logischerweise nicht die Größe der ColumnNumber und/oder WorksheetNumber
und/oder BookNumber...nur die RowNumber. Das ist das äußerste linke Paar von Klammern in 2D-, 3D- und 4D-Arrays.
 
cameofx:
Wir können also logischerweise die Größe nicht ändern [...]

Das ist richtig.

 
gordon:

Ich bin mir nicht sicher, was das bedeutet, aber egal, die linke Seite ist die erste Dimension. Ein großer Teil der Dokumentation ist eine Übersetzung aus dem Russischen, oft keine sehr gute Übersetzung, vielleicht ist dies einer dieser Fälle. Das mit den Spalten und Zeilen ist nur eine Metapher, die es uns erleichtert, uns das Array vorzustellen, aber nichts mit der tatsächlichen Implementierung zu tun hat. Ob die erste Dimension eine 'Zeile' oder eine 'Spalte' ist, bleibt Ihnen überlassen...

Jepp... leider verlassen sich viele von uns - ich bin sicher, ich spreche für viele Neulinge da draußen... - viel zu oft auf die vorhandene Dokumentation...

Grund der Beschwerde: