Arrayreihenfolge

  • Moin zusammen.

    Ich würde gerne ein Array sortieren.

    Die Werte stehen im Array $Array1_werte ( max. 720 Werte, was aber egal sein sollte)
    Die Reihenfolge der Werte steht im Array $Array2 (sind 64 neue Positionen)
    Der Startwert der Reihenfolge steht im Aray $_startwert_der_Reihenfolg

    Wie bekomme ich es hin, das der erste Wert aus $Array1_werte an die Position vom ersten Wert aus dem Array Array2 steht?
    Also DK45 soll auf Position 55 ; DK28 soll auf Position 30; 963 soll auf Position 17; usw.

    Wenn der Wert von $_startwert_der_Reihenfolge sich ändert, z. B. auf 18, dann soll bei 18 begonnen werden. Ist man beim letzten Wert der Reihenfolge angekommen, beginnt danach die Reihenfolge wieder bei 55. Also unendlich.

    Spoiler anzeigen

    #include <Array.au3>

    Global $Array1_werte = ["DK45" "DK28" "963" "NOR17" "731" "575" "276" "679" "366" "NOR15" "NOR58" "NOR23" "958" "166" "909" "478" "634" "846" "744" "525" "701" "77" "162" "211" "51DK" "873" "401" "909" "717" "52" "552" "707" "327" "782" "705" "644" "47" "524" "596" "NOR88" "246" "700" "197" "696" "497" "913" "35" "99" "DK42" "725" "652" "584" "701" "36" "296" "402" "483" "961" "NOR87" "9" "482" "944" "613" "161" "205" "657" "734" "329" "791" "750" "731" "196" "437" "312" "979" "489" "NOR55" "787" "39" "FIN01" "764" "344" "745" "666" "733" "37" "273" "38" "784" "797" "109" "903" "340" "272" "742" "426" "127" "206" "623" "842" "DK45" "DK28" "963" "NOR17" "731" "575" "276" "679" "366" "NOR15" "NOR58" "NOR23" "958" "166" "909" "478" "634" "846" "744" "525" "701" "77" "162" "211" "51DK" "873" "401" "909" "717" "52" "552" "707" "327" "782" "705" "644" "47" "524" "596" "NOR88" "246" "700" "197" "696" "497" "913" "35" "99" "DK42" "725" "652" "584" "701" "36" "296" "402" "483" "961" "NOR87" "9" "482" "944" "613" "161" "205" "657" "734" "329" "791" "750" "731" "196" "437" "312" "979" "489" "NOR55" "787" "39" "FIN01" "764" "344" "745" "666" "733" "37" "273" "38" "784" "797" "109" "903" "340" "272" "742" "426" "127" "206" "623" "842" "39" "954" "99NOR" "FIN2" "388"]

    Global $_startwert_der_Reihenfolge = 55

    ; Reihenfolge 64 Werte

    Global $Array2 = [55 30 17 42 27 36 15 38 18 43 54 29 16 39 26 35 31 56 41 20 33 28 37 14 44 19 32 53 40 13 34 25 57 2 45 8 21 64 51 12 46 5 60 1 52 9 24 63 3 58 7 48 61 22

    11 50 6 47 4 59 10 49 62 23 ]

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Irgendwie sind deine Aufgabenstellungen oftmals - nunja - ein bisschen bizarr.

    Vielleicht wäre es sinnvoll zu erklären warum und wofür du genau diesen Ansatz benötigst.

    Evtl. (ich sage sogar wahrscheinlich) findet sich dann ein anderer - besserer Ansatz.

    Quasi das klassische X-Y-Problem.

    Im konkreten Fall verstehe ich das Ding mit dem Startwert nämlich noch nicht wirklich.

    Im Prinzip müsste man ja erstmal nur ein zweites leeres Array für die Werte erstellen und dann dieses anhand der Indizes in Array2 entsprechend befüllen.

    Aber sicher hab ich das bisher noch falsch verstanden - wie gesagt insbesondere das mit dem Startwert kapiere ich noch nicht

  • Hi Alina,

    ich hab das ganze mal umgesetzt, so wie ich es verstanden habe. Am Ende besteht nur das Problem, dass die letzten Werte nicht zugeordnet werden können, da das Positions-Array kein Vielfaches vom Value-Array ist...

    Es geht sich also am Ende nicht aus, oder man hätte leere Zellen. In der Lösung wird das Ende erstmal weggelassen, ggf. kannst du ja klarstellen, was dann passieren soll.

    Außerdem: Position <> Index? Bei mir sind die Einträge einen Wert höher, weil man beim Programmieren mit 0 anfängt, nicht mit 1.

    Ansonsten hier das Script:

    MfG, Kanashius

  • AspirinJunkie

    Der Startwert ist der Wert im Array, wo die neue Reihenfolge startet.

    Jetzt ist es die 55. Ist der Startwert die 18, dann soll der Wert DK45 an die 18. Stelle kommen, DK2 an Stelle 43, usw.

    Ich hatte mal dieses Script gefunden:

    C
    #include <Array.au3>
    #include "_ArraySortStable2D.au3"
    
    Local $aTestArray[6][2] = [[5, "Cherry"], [4, "Banana"], [3, "Cherry"], [2, "Orange"], [1, "Apple"], [0, "Test"]]
    
    _ArraySortStable2D($aTestArray, 0)
    _ArrayDisplay($aTestArray)
    
    _ArraySortStable2D($aTestArray, 1, Default, Default, True)
    _ArrayDisplay($aTestArray)

    Hier ist die Position, dann das Komma und dann der Wert

    dann sieht es so aus: [55, "DK45"], [30, "DK28"], [17, "963"], ....

    Mit geänderten Startwert auf "18" sieht es so aus:
    dann sieht es so aus: [18, "DK45"], [43, "DK28"], [54, "963"], ....
    Und ja, Du hast recht und das dachte ich mir ja auch, das man ein neues Array schreiben muss.

    Habe ich es nun verständlich erklärt?


    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Hallo Kanashius.
    Das hast Du richtig verstanden. Sorry für die zu kurze Beschreibung meines Problemes.

    Wieso bekomme ich das Ergebnis nicht in eine MsgBox ausgegeben. Bin ich zu übermüdet oder zu blond?

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Habe ich es nun verständlich erklärt?

    Meine Frage nach dem wofür und wieso wurde bislang noch nicht geklärt.
    Wie gesagt: Evtl. gibt es bereits schon einen völlig anderen Ansatz um dein eigentliches Problem zu lösen.

    Kann mir anhand des Geschriebenen eine Möglichkeit vorstellen:


    Es ist jedoch die Frage von Kanashius offen, was mit den Elementen passieren soll, die nicht mit erfasst werden, da $Array2 eine andere Dimension hat als $Array1. Bleiben die leer oder erhalten die den alten Wert an dieser Position?

    Ebenso ist noch fraglich ob die Position von der du sprichst 0 oder 1-basiert ist.

    Aber am Ende sollten wir wieder schnell zur Eingangsfrage zurück: Wofür brauchst du das genau und warum denkst du, dass genau das der Ansatz ist um dein eigentliches Problem zu lösen?

  • Wofür brauche ich das?

    Ich möchte die Werte, die ich nur so voirliegen habe wie im Array $Array1_werte, in einer anderen Reihenfolge haben.
    Und ja, es ist der Ansatz der richtige, da ich nur die Werte in der richtigen Reihenfolge benötige. Also das was in Col 1 dann steht benötige ich.

    Ist eigentlich 1-basiert.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Wofür brauche ich das?

    Ich möchte die Werte, die ich nur so voirliegen habe wie im Array $Array1_werte, in einer anderen Reihenfolge haben.

    Du sitzt also Samstag-Abends da und überlegst dir: Hm ich würde gerne mal mein Array in einer anderen Reihenfolge sortieren, dabei die Reihenfolge aus einem anderen Array mit den Indizes übernehmen und obendrein auch noch einen wechselnden Startwert vorgeben.

    Das ist doch nicht dein Anwendungsfall - das ist dein Ansatz für die Lösung eines bestimmten Problems.
    Nur dieses eigentliche Problem kennen wir bislang nicht - nur du.
    Es geht nicht darum, DASS du ein Array entsprechend sortieren möchtest sondern es geht um die Frage WARUM du ein Array entsprechend sortieren möchtest.

  • Das Problem ist, das mir Werte in einer Datei gegeben sind, die ich jedoch zum weiteren Nutzen in einer anderen Reihenfolge benötige.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Danke, das Problem ist nun zu 100 vH gelöst.
    Und das bei meinen derzeitig schlechten Erklärungen. SORRRRRRRY !!!!

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl