Besitzt die For-In-Schleife nativ eine Indexvariable analog wie bei For-To?

  • Hi,

    ich erstelle einen Array aus dem Zwischenspeicher (variabel).
    Ich durchlaufe es mit for $element, das klappt soweit sehr gut.
    Gibt es eine Möglichkeit den akutellen Index oder Reihenanzahl zu nutzen?
    Beispiel:

    Code
    $aktuellerIndex = $aArray[i]
    
    
    $var = $aArray[i + 3]
  • Weißt du was das X-Y-Problem ist?
    Es tritt sehr häufig in Foren wie diesem auf und man kann es ungefähr so beschreiben:

    • Ein User möchte X erreichen.
    • Er glaubt die Lösung des Problems wäre Y.
    • Da es dabei Probleme gibt stellt er eine Frage Y betreffend aber ohne X zu erwähnen.
    • Auch wenn für die Helfenden Y ziemlich schräg erscheint bemühen sich alle irgendwie Y hinzubiegen.
    • Effektiver wäre es aber gewesen die Fragestellung von Anfang an anders zur formulieren: Ich möchte X erreichen dazu habe ich schon Y probiert aber noch immer nicht das gewünschte erreicht.

    Dein Y ist die variable Indizierung eines Arrays.
    Dein X kennen wir hingegen noch nicht.

    Es würde uns (und damit dann vor allem dir) sehr viel helfen wenn du das eigentliche Grundproblem mal darlegst und dein wirkliches Ziel dazu mal formulierst.
    Ich habe hier nämlich bisschen Probleme das eigentliche Problem herauszuarbeiten.
    Was ist z.B. mit "Array variabel aus dem Zwischenspeicher" erstellen exakt gemeint?
    Wie sieht das Array aus? - was soll mit ihm gemacht werden?
    Was meinst du nun mit aktueller Index? In dem Beispiel von dir ist i (auch wenn syntaktisch noch das "$" fehlt) der aktuelle Index während $aktuellerIndex den Inhalt an dieser Stelle enthält.

  • Mein X: Ich möchte eine Reihe eines dynamischen erstellen Arrays direkt adressieren. (Thematitel)

    Ich habe ein 1-D-Array. Jede Zeile ist eine Reihe im Array. Das Array kommt aus dem Zwischenspeicher und sieht demnach immer etwas anders aus.

    Gibt es eine Möglichkeit eine Reihe anzusprechen, und zwar nicht mit $aArray[1400] sondern mit $aArray[$x] wobei dann $x eine beliebige Zahl ist?

    In Autohotkey gibt es zumindest die Möglichkeit, den aktuellen Index des Arrays auszugeben, dass würde mir schon reichen.

  • Ich möchte eine Reihe eines dynamischen erstellen Arrays direkt adressieren. (Thematitel)

    "Dynamisch erstellt" - wie? woher?
    Ergebnis?

    Ich habe ein 1-D-Array. Jede Zeile ist eine Reihe im Array.

    Zeilen in einem 1D-Array?
    Was ist mit der unterschiedlichen Begrifflichkeit Reihe vs. Zeile gemeint? (subjektiv das selbe)

    Gibt es eine Möglichkeit eine Reihe anzusprechen, und zwar nicht mit $aArray[1400] sondern mit $aArray[$x] wobei dann $x eine beliebige Zahl ist?

    Klar - genauso wie du es hingeschrieben hast.


    In Autohotkey gibt es zumindest die Möglichkeit, den aktuellen Index des Arrays auszugeben, dass würde mir schon reichen.

    Was meinst du mit aktuell?
    Du bestimmst doch wo du dich im Array befindest - ergo kennst du den Index sowieso schon. Z.B. in der For-To-Schleife.
    Oder iterierst du über eine For-In-Schleife?


    Nochmal zusammengefasst: Je unkonkreter du fragst umso unkonkreter können wir dir helfen (falls auf dem Weg zum konkreten dabei nicht die Lust verloren geht).

  • 1. Wenn du die Anzahl der Arrayelemente nicht kennst ist es ziemlich riskant in einer Schleife einen Arrayindex anzusprechen der irgendwo "weiter vorne" liegt und evtl. garnicht existiert.

    Beispiel: Dein Array hat 100 Elemente, du befindest dich beim iterieren gerade bei Element 99 und sprichst dann Element "99+4" an.
    Resultat: Programmabsturz, da du einen ungültigen Arrayindex verwendest

    2. In einer FOR...IN Schleife gibt es soweit ich weiß keine Zählervariable $i die du ansprechen oder zur Berechnung eines Folgeindexes nutzen könntest.

    3. Verwende einfach eine FOR...TO Schleife und schau dir die Funktion ubound(...) in der Autoit Hilfe bzw. das Array Tutorial von Bugfix an.

  • Es hindert dich niemand daran eine eigene Zählervariable in der Schleife zu erhöhen um letztlich rauszufinden wo du dich aktuell befindest.
    Dann kannst du aber auch einfach gleich einen FOR...TO Schleife nutzen.

  • Lesen hilft... verwende einfach eine eigene Zählervariable in der Schleife wenn du unbedingt eine FOR...IN Schleife verwenden willst.... warum auch immer...
    Vermutlich hast du dir auch das Array Tutorial von Bugfix noch nicht angesehn und keine Ahnung wofür man ubound() nutzen könnte wenn man dann doch lieber zur FOR...TO Schleife wechselt.

  • Sicher, du kannst immer noch das machen (die Sinnhaftigkeit sei zu hinterfragen):


    Die Frage ist warum du nicht einfach direkt die for ... to Schleife nutzt.

    Edit:

    ermutlich hast du dir auch das Array Tutorial von Bugfix noch nicht angesehn und keine Ahnung wofür man ubound() nutzen könnte

    Selbst wenn ist das keine geistige Hürde, dass man auf den Trichter kommt dass auch die for...in... Schleife maximal n = UBound(array) durchläuft und man entsprechend einen Counter einführt. Ich glaube eher hier liegt ein allgemeines Verständnisproblem davon vor, was ein Array überhaupt ist.

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Sicher, du kannst immer noch das machen (die Sinnhaftigkeit sei zu hinterfragen):

    Die Frage ist warum du nicht einfach direkt die for ... to Schleife nutzt.

    Edit:

    Selbst wenn ist das keine geistige Hürde, dass man auf den Trichter kommt dass auch die for...in... Schleife maximal n = UBound(array) durchläuft und man entsprechend einen Counter einführt. Ich glaube eher hier liegt ein allgemeines Verständnisproblem davon vor, was ein Array überhaupt ist.

    Wo steht, das ich nicht durch den Hinweis von misterspeed die for to schleife nutze?

    mein post oben, bezieht sich darauf, das es in einer for in schleife nicht möglich ist und genau diese Info brauchte ich.

    Ich hab bereits auf die For to schleife gewechselt. Warum auch nicht. (Einen eigenen index erstellen möglich, aber zu umständlich)
    Es funkioniert sehr gut.

    Lesen hilft, und vllt weniger interpretieren...

    Vielleicht solltest du mal lesen was ich schreibe, es ist anscheinend nicht möglich in einer For in Schleife den Index anzusprechen.
    Ich habe nirgends geschrieben, dass es nicht möglich ist. Ich beziehe mich explizit auf Punkt 2 der Ausführungen von misterspeed.

    Den Code, dass es möglich ist in einer For in schleife direkt auf den Index zuzugreifen bist du mir immer noch schuldig.
    Ansonsten habe ich keinen "Mist" erzählt und eine Entschuldigung wäre wohl mal fällig

  • mein post oben, bezieht sich darauf, das es in einer for in schleife nicht möglich ist und genau diese Info brauchte ich.

    Das ist völliger Blödsinn!!!!!!!!!!!!!!!!!!!
    Erzähl doch bitte keine Scheiße rum.

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Das ist völliger Blödsinn!!!!!!!!!!!!!!!!!!!Erzähl doch bitte keine Scheiße rum.

    Ich habe dich freundlich um den Code gebeten dafür, um zu sehen wie, dann wäre auch meine Ursprungsfrage beantwortet.
    Das würde auch misterspeed helfen, der ebenfalls anscheinend nicht weiß wie es geht.

  • Hast du Lack gesoffen?
    Natürlich weiß er wie es geht, er hat die Lösung sogar genannt. Den Code habe ich dir, da du offensichtlich zu faul bist zu lesen, sogar gleich hinterher geschoben.
    Lern du lieber mal lesen.

    verwende einfach eine eigene Zählervariable in der Schleife wenn du unbedingt eine FOR...IN Schleife verwenden willst


    Hör doch mal auf hier Leute die Ahnung haben zu diffamieren.

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Hast du Lack gesoffen?
    Natürlich weiß er wie es geht, er hat die Lösung sogar genannt. Den Code habe ich dir, da du offensichtlich zu faul bist zu lesen, sogar gleich hinterher geschoben.
    Lern du lieber mal lesen.

    Hör doch mal auf hier Leute die Ahnung haben zu diffamieren.

    mhhh, du hast meine Beträge nicht gelesen, ich zitiere mich mich selbst:

    Ich hab bereits auf die For to schleife gewechselt. Warum auch nicht. (Einen eigenen index erstellen möglich, aber zu umständlich)

    Und darum geht es auch nicht. misterspeed hat mir mit seinem Beitrag doch geholfen.
    Es ging darum ob man direkt einen Index ansprechen kann, eine built-in Variable.
    Und diese gibt es nicht. Man muss Sie selbst erstellen. In Autohotkey gibt es genau diese built-in Variable.
    Und das steht genauso in meinem 2. Beitrag.

    misterspeed schreibt selber er kennt keine built-in Variable (Punkt 2)


    1. Wenn du die Anzahl der Arrayelemente nicht kennst ist es ziemlich riskant in einer Schleife einen Arrayindex anzusprechen der irgendwo "weiter vorne" liegt und evtl. garnicht existiert.

    Beispiel: Dein Array hat 100 Elemente, du befindest dich beim iterieren gerade bei Element 99 und sprichst dann Element "99+4" an.
    Resultat: Programmabsturz, da du einen ungültigen Arrayindex verwendest

    2. In einer FOR...IN Schleife gibt es soweit ich weiß keine Zählervariable $i die du ansprechen oder zur Berechnung eines Folgeindexes nutzen könntest.

    3. Verwende einfach eine FOR...TO Schleife und schau dir die Funktion ubound(...) in der Autoit Hilfe bzw. das Array Tutorial von Bugfix an.

  • Kleiner Tipp am Rande:

    Mit dieser besserwissenden und kleinkarierten Art wirst du hier nicht allzulange ernst genommen werden. Wenn du ernsthaftes Interesse an Autoit und an Problemlösungen hast würde ich dir ein anderes Auftreten nahelegen. Nicht wir wollen etwas von dir, sondern du brauchst uns um deine Fragen zu beantworten oder Probleme zu lösen. Wenn du uns auf den Zeiger gehst bekommst du eben keine Hife mehr, das haben andere schon vor dir lernen dürfen. Das ist im realen Leben im Übrigen auch nicht anderst. Du kennst sicher das Sprichwort "Wie es in den Wald hineinruft..."

    Für die Zukunft kannst du vielleicht folgendes aus diesem Thread mitnehmen:

    1. Bevor man fragen stellt liest man sich erstmal in das Thema ein. z.B. Autoithilfe oder externe Tutorials zum Thema Arrays und Schleifen
    2. Wenn man nicht fündig wird oder nachwievor Verständnisprobleme bestehen überlgt man sich was eigentlich das Problem und vorallem was das Ziel ist, denn der Weg zum Ziel ist variabel, Probleme müssen nicht zwangsläufig gelöst werden wenn man sie auch durch Alternativen umgehen kann.
    3. Anschließend versucht man das so gut wie möglich zu beschreiben und konkretre Fragen zu stellen. Bevorzugt mit lauffähigen Beispielscripten die deine bisherigen (Fehl-)Versuche zeigen. Damit zeigst du, dass du bereits Eigeninitiative ergriffen hast.
    4. Unabhängig von der Qualität der Antworten legt man weder aggressives, abwertendes oder verletzendes Verhalten an den Tag... man bleibt stattdessen freundlich, geduldig und lösungsorientiert. Das ist im realen Leben genauso... solange ich etwas von jemandem brauche denk ich mir eben meinen Teil und sage ihm nicht ins Gesicht, dass er ein Vollidiot ist.
    5. Es schadet im Übrigen nicht auch mal ein wenig über den Tellerand hinauszuschauen und sich seine Gedanken zu machen ob der andere vielleicht ja doch Recht hat und garnicht so daneben liegt mit dem was er sagt oder schreibt.
    6. Nach Lösung des Problems markiert man den Thread durch Editieren des 1. Postings als "gelöst" und bedankt sich bevorzugt für die Hilfe.

  • Du hast völlig recht, aber wenn jemand zu mir sagt "schreib nicht so ein mist" / "erzähl doch keine scheiße" / "hör auf zu diffamieren", dann ist er wohl aggressiv geworden. ER (ich lasse ihn ungenannt) hat nicht korrekt gelesen und mich zu erst beschimpft und wundert sich über ein echo? sagt mir ich lese tutorials oder beiträge nicht richtig? er selbst war hier das problem, 0 hilfe und beleidigung.

    ich bedanke mich nochmal bei dir, misterspeed.