Aus einem Array eine bestimmte Zeile in ein anderen Array schieben/schreiben.

  • Hallo,

    Ich hab folgenden Aufbau der Arrays

    Die Reihe wird mit mit einem "," getrennt.
    Array1:

    XX,378
    YS,879
    IU,289

    ...

    Array2:

    378,67809
    879,12893
    289,21983
    ...

    Array1 hat keine Doppelten Einträge, genau wie Array2.

    Nun wollte ich die 2 Arrays in einen neuen Array3 schieben damit die Informationen so aussehen:

    XX,378,67809
    YS,879,12893
    IU,289,21983
    ...

    Ich bin ein wenig ratlos wie ich das ganze umsetzen kann.

    Einmal editiert, zuletzt von Cerva (18. August 2012 um 19:07)

  • Also:
    Gehen wir mal davon aus, dass die Arrays manuell definiert werden:

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    Dim $avArray1[3][2] = [["XX",378],["YS",879],["IU",289]]
    Dim $avArray2[3][2] = [[378,67809],[879,12893],[289,21983]]
    Dim $avArray3[3][3]
    For $i = 0 To UBound($avArray1) - 1
    $avArray3[$i][0] = $avArray1[$i][0]
    $avArray3[$i][1] = $avArray1[$i][1] ; oder $avArray2[$i][0]
    $avArray3[$i][2] = $avArray2[$i][1]
    Next
    _ArrayDisplay($avArray3)

    [/autoit]

    Wenn die Arrays nicht geordnet sind, sondern durcheinander, sprich dass nach $avArray1[X][1] und $avArray2[Y][0] überprüft werden muss, melde dich.

    lg chess

  • Ich versuch es noch einmal.
    Ich habe 2 Arrays die jeweils ein 2D Array sind.


    In Array1 sind folgende Infos Enthalten: (Kein Autoit Code!)

    Array1 [0][0] = XX
    Array1 [0][1] = 645

    Array1 [1][0] = XA

    Array1 [1][1] = 975


    .. etc ...
    Array2 Sieht so aus:(Ebenfalls kein Autoit Code!)


    Array2 [0][0] = 8489
    Array2 [0][1] = 645

    Array2 [1][0] = 9845

    Array2 [1][1] = 975

    Nun möchte ich aus Array1 und Array2, Array3 Machen und das ganze wie folgt aufbauen:


    Array3 [0][0] = 8489
    Array3 [0][1] = 645

    Array3 [0][2] = XX

    Array3 [1][0] = 9845

    Array3 [1][1] = XA
    Array3 [1][2] = 645

    ...

    Die Arrays sind nicht sortiert. Die eintrage die zu Array 3 werden sollen erkennt man an der Zahl aus Array1. In Array1 stehen Buchstaben und eine Zahl quasi wie ein Pärchen. In Array2 Stehen 2 Zahlen pro Reihe, und eine dieser Zahlen ist Identisch mit der aus Array1.

    Ich bereite gleich mal ein Abbild der beiden Arrays vor und wie ich mit Array3 dann vorstelle.

    Und vielen Dank für eure Beitrage ^^

  • Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    #include <Array.au3>
    Dim $avArray1[3][2] = [["XX", 378],["YS", 879],["IU", 289]]
    Dim $avArray2[3][2] = [[378, 67809],[879, 12893],[289, 21983]]
    Dim $avArray3[1][3]

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

    For $iArray1 = 0 To UBound($avArray1) - 1
    For $iArray2 = 0 To UBound($avArray2) - 1
    If $avArray1[$iArray1][1] = $avArray2[$iArray2][0] Then
    Redim $avArray3[UBound($avArray3) + 1][3]
    $avArray3[UBound($avArray3) - 1][0] = $avArray1[$iArray1][0]
    $avArray3[UBound($avArray3) - 1][1] = $avArray1[$iArray1][1]
    $avArray3[UBound($avArray3) - 1][2] = $avArray2[$iArray2][1]
    EndIf
    Next
    Next
    _ArrayDisplay($avArray3)

    [/autoit]


    So? ;)

    lg chess

  • Array1(2d)
    XXX,564
    YYY,695
    DDD,984
    WKD,974
    DIS,981
    DNI,123
    KOD,658
    ODS,845

    Array2(2d)
    998,847887
    564,565465
    695,994899
    645,984984
    984,941999
    658,654656
    845,949462
    974,545641
    981,565165
    235,198766
    123,561651
    995,561651
    984,655616
    878,656548

    Array3(2d)(So soll es aussehen)
    XXX,564,565465
    YYY,695,994899
    DDD,984,941999
    WKD,974,545641
    DIS,981,565165
    DNI,123,561651
    KOD,658,654656
    ODS,845,949462

    Das Problem was ich nun habe war im Prinzip, das ich schauen musste welcher Eintrag nun passt. Ansonsten wär die Lösung von Dir ebend natürlich ideal gewesen.

  • Hatte Dein Beitrag nicht gesehen, war nur meine Angekündigte Ergänzung. Dein Skript funktioniert natürlich wunderbar. Jedoch würde ich ganz gerne dass Du mir da vielleicht erklärst was genau passiert. Ich finde das sehr verwirrend, vorallem weil es sehr gut funktioniert!

  • Gut gut, ich denke, dein Anliegen bezieht sich auf Zeile 6 bis 15, also diesen Abschnitt hier?

    [autoit]


    For $iArray1 = 0 To UBound($avArray1) - 1
    For $iArray2 = 0 To UBound($avArray2) - 1
    If $avArray1[$iArray1][1] = $avArray2[$iArray2][0] Then
    Redim $avArray3[UBound($avArray3) + 1][3]
    $avArray3[UBound($avArray3) - 1][0] = $avArray1[$iArray1][0]
    $avArray3[UBound($avArray3) - 1][1] = $avArray1[$iArray1][1]
    $avArray3[UBound($avArray3) - 1][2] = $avArray2[$iArray2][1]
    EndIf
    Next
    Next

    [/autoit]


    Also, was bei den For-Schleifenköpfen passiert, müsste dir ja klar sein.
    Die If-Abfrage in Zeile 3 (Sofern die Schleife vollkommen durchlaufen wurde) prüft jeden Arrayeintrag von $avArray1 (Spalte 2, also da wo die Zahlen stehen) auf Gleichheit mit jedem Arrayeintrag von $avArray2 (Spalte 1, also wo auch die ganzen Zahlen stehen, woher man die Zusammenhänge schließen kann). Sofern die Übereinstimmung besteht, wird das Array $avArray3 um 1 Zeile erweitert und entsprechend die neu erzeugte Zeile beschrieben.

    Noch Fragen? Frag ruhig.:D

    lg chess