Array sortieren die 2.

  • hallo in die runde,

    ich habe anscheinend auch ein unlösbares array-problem.

    in $tmp[$x] ($x=1-24) habe ich werte, die gemäss
    $tmpsort="7,19,11,23,5,17,6,18,8,19,3,15,12,24,1,13,2,14,4,16,10,22,9,21"

    in ein neues array $xma[$x] sortiert werden müssen.

    zu fuss wäre das:
    $xma[7]=$tmp[1]
    $xma[19]=$tmp[2]
    $xma[11]=$tmp[3]
    usw. bis $tmp[24]

    gut, könnte man so machen; nur muss ich ggf. $tmpsort mal ändern.
    ich komme da einfach nicht auf den trichter, wie man das anders lösen könnte.

    für eure hilfe danke ich schon mal im voraus.

    gruss exberliner

    • Offizieller Beitrag

    Hallo,

    machs doch einfach in einer Schleife:

    [autoit]

    $sortIndex = StringSplit($tmpsort,",")

    [/autoit][autoit][/autoit][autoit]

    For $i = 1 To $sortIndex[0]
    $xma[$sortIndex[$i]] = $tmp[$i]
    Next

    [/autoit]
  • bernd670 , das geht so nicht. grübel grübel

    [autoit]

    $sortIndex = StringSplit($tmpsort,",")
    For $i = 1 To $sortIndex[0]
    $xma[$sortIndex[$i]] = $tmp[$i]
    Next

    [/autoit]

    und ich hab immer noch nen brett vorm kopf. ich bin jetzt schon so verdattert, dass ich auch keine erklärung abgeben kann, warum das nicht so funktioniert. $i ist beim ersten durchgang 1 .. wie kann da $xma[$sortIndex[$i]] dann 7 sein ?

    hilfe, ich bin am verzweifeln; sollte ma l ne woche pause machen :rolleyes:

    gruss exberliner

    Edit GtaSpider: Ok.. Dann Mach ich das Thema halt wider auf offen *g*

    • Offizieller Beitrag

    $sortIndex ist ein Array, durch StringSplit erzeugt, das mit den Elementen von $tmpsort befüllt ist.
    $sortIndex[0] enthält die Anzahl der Elemente und der Rest lt. Index
    $sortIndex[1]=7 ; $sortIndex[2]=19 ; $sortIndex[3]=11 usw.

    Also die Lösung von Bernd macht genau das, was du gewünscht hast. Oder wolltest du doch was anderes? :rolleyes:

  • BugFix

    hmm, oki, ich wiederhole mal:

    als quelle habe ich ein 24er array $tmp wo verschiedene werte sind.
    als ziel benötige ich ein neues 24-er array ($xma) sortiert nach dem schema bzw. nach der sortierung die in $tmpsort steht:
    $tmpsort="7,19,11,23,5,17,6,18,8,19,3,15,12,24,1,13,2,14,4,16,10,22,9,21"

    $tmp[1] muss nach $xma[7]
    $tmp[2] muss nach $xma[19]
    ...
    mit der schleife von bernd670 dachte ich auch erst, bingo ... aber denkste...

    bei dem code:

    [autoit]

    $sortIndex = StringSplit($tmpsort,",")
    For $i = 1 To $sortIndex[0]
    $xma[$sortIndex[$i]] = $tmp[$i]
    Next

    [/autoit]


    ist leider die sortierung nicht korrekt. vielleicht sollte ich mal ein beispiel mit edit nachreichen ? aber ich muss leider erstmal was anderes noch fertig bekommen.

    gruss exberliner

  • hallo nochmal in die runde,

    ich glaube so langsam, dass ich das problem bin. :hm: :weinen:
    mein fehler war, dass ich in der schleife von bernd670 die anweisung
    msgbox(0,"",$xma[$i]) vor dem next zur sichtkontrolle eingefügt hatte.
    und das liefert natürlich falsche ergebnisse.
    ich werde mal ne pause machen müssen, sonst werde ich hier nur zur last. :hammer:

    für alle, die doch nun gerne die lösung im einfachen verfahren sehen möchten :

    [autoit]

    dim $tmp [25]
    dim $xma [25]
    $tmpsort="7,19,11,23,5,17,6,18,8,20,3,15,12,24,1,13,2,14,4,16,10,22,9,21"
    ; Simulation für $XMA ;; muss ja dann in der aufsteigenden Reihenfolge sein
    $tmp[1]=0.07
    $tmp[2]=0.19
    $tmp[3]=0.11
    $tmp[4]=0.23
    $tmp[5]=0.05
    $tmp[6]=0.17
    $tmp[7]=0.06
    $tmp[8]=0.18
    $tmp[9]=0.08
    $tmp[10]=0.20
    $tmp[11]=0.03
    $tmp[12]=0.15
    $tmp[13]=0.12
    $tmp[14]=0.24
    $tmp[15]=0.01
    $tmp[16]=0.13
    $tmp[17]=0.02
    $tmp[18]=0.14
    $tmp[19]=0.04
    $tmp[20]=0.16
    $tmp[21]=0.10
    $tmp[22]=0.22
    $tmp[23]=0.09
    $tmp[24]=0.21

    [/autoit][autoit][/autoit][autoit]

    $sortIndex = StringSplit($tmpsort,",")
    For $i = 1 To $sortIndex[0]
    $xma[$sortIndex[$i]] = $tmp[$i]
    ;; MsgBox(0,"",$xma[$i) ;; <- hat hier nix zu suchen
    Next

    [/autoit][autoit][/autoit][autoit]

    For $i =1 to 24
    MsgBox(0,"",$xma[$i]&" richtig: "&$i)
    Next

    [/autoit]

    ich hoffe, ich darf trotzdem noch bei künftigen problemchen nachfragen ;)

    gruss exberliner

    • Offizieller Beitrag

    Hmm.. du hast recht. Das Ergebnis ist falsch. Nur kann ich bisher nicht erkennen warum der Fehler entsteht. Wenn ich mir in der Schleife die Werte anzeigen lasse, ist alles korrekt ( $i=1; $xma[7]=$tmp[1] ) usw.
    Lasse ich mir aber das fertige array anzeigen, sind die Einträge völlig durcheinander bzw. einer fehlt sogar.
    Ich such mal weiter.

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    Dim $tmp[25] ; $tmp[0] lassen wir leer, damit Index 1 auch Eintrag 1 ist
    Dim $xma[25]

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To 24
    $tmp[$i] = "$tmp-Pos: "&$i ; die Daten, die nach dem Muster von $sortIndex sortiert werden sollen
    Next
    $tmpsort="7,19,11,23,5,17,6,18,8,19,3,15,12,24,1,13,2,14,4,16,10,22,9,21"
    $sortIndex = StringSplit($tmpsort,",")
    _ArrayDisplay($sortIndex,"SortIndex") ; hier stimmt alles
    For $i = 1 To $sortIndex[0]
    $xma[$sortIndex[$i]] = $tmp[$i] ; auch das ist alles OK
    Next
    _ArrayDisplay($xma,"Sortiert nach Schlüssel") ; nur noch Schwachsinn :(

    [/autoit]
  • hallo bugfix,

    du kennst das doch sicher auch : EIN fehler kommt selten allein.
    in $tmpsort nach der 8 muss eine 20 stehen. sorry.

    aber ich bin auch noch nicht glücklich, im eigentlichen programm habe ich immer noch irgendeinen bock drin. aber das krieg ich schon noch raus.

    gruss exberliner