Array Count

  • Hi!

    Ich habe folgendes Problem: ich habe einen Array, und weiß nicht, wie viele Indizes (heißt das so?) er hat. Ich bräuchte eine Funktion, wie count() in php.
    Ich glaube nicht, dass es so eine Funktion im GM gibt. Hat jemand eine Idee wir man das programmieren könnte? Oder vielleicht ein Script? Ich habs schon versucht mit

    var_=variable_local_array_get(array,ind)
    if!(variable_local_exists(var_)) return ind

    funktioniert aber nicht :(

    Mein PC: WinXP Pro | 3 GHz x 2 | 1024 MB RAM | Intel Grafikchip, 224MB
  • würde eche helfen wen du sagst würdest wie du den array aufgebaut hast.
    in java gibt es einen befehl der sich array.length nennt. hab im gm nahcgesehen, aber den gibts nicht, leider. eine möglichkeit währe es den array in einen string umzuwandeln und ihn dan über string(array) auslesen würdest, aber eine code kan ich dir athoc ncht geben.
    tut mir leid.
    :) Nobody is perfect (-:

    "Dummköpfe sind Denkerköpfen weit überlegen. Zahlenmäßig." Ernst Ferstl
  • Merk dir die Zahl doch selber, indem du zB a[0] für die Länge reservierst und erst ab a[1] wirkliche Werte einträgst. Dann musst du nur noch aufpassen, wenn du was hinzufügst oder austrägst, ob du das Array damit vergrößerst oder verkleinerst und das in a[0] addieren oder abziehen.
    Einige meiner Spiele:
  • also, mein array schaut so aus
    a[0]="test0"
    a[1]="test1"
    a[2]="test2"
    .
    .
    .

    Ich hab in der GM Hilfe schon nachgesehen, aber keinen Befehl gefunden.
    Die Länge des arrays in a[0] schreiben kann ich auch nicht, da der array zb aus einer datei eingelesen wird (zb mit execute_file)
    Habt ihr noch andere Vorschläge?
    Ich wäre sehr dankbar, wenn ich dieses Problem lösen könnte!

    Mein PC: WinXP Pro | 3 GHz x 2 | 1024 MB RAM | Intel Grafikchip, 224MB
  • Ich hab jetzt folgendes Versucht:

    GML-Quellcode

    1. ind=31999
    2. repeat(32000) {
    3. var_=variable_local_array_get(array,ind)
    4. if(string(ord(string(var_)))!="48") return ind
    5. ind-=1
    6. }


    Das funktioniert zwar, ist aber sehr sehr langsam. hat jemand eine bessere Idee?

    Mein PC: WinXP Pro | 3 GHz x 2 | 1024 MB RAM | Intel Grafikchip, 224MB
  • Arrays sind im Game Maker sehr sehr primitiv umgesetzt und auch recht langsam. Nach Möglichkeit sollte man vorher immer schauen ob man es nicht mit den Datenstrukturen auch lösen kann, da man mit denen mehr machen kann und die effizienter sind. gm-d.de/help/411_00_datastructures.html
    Die bringen von Haus aus ne Funktion zur Größenmessung mit.
    "Die Erde ist ein Irrenhaus. Dabei könnte das bis heute erreichte Wissen der Menschheit aus ihr ein Paradies machen. Dafür müsste die weltweite Gesellschaft allerdings zur Vernunft kommen."
    - Joseph Weizenbaum
  • Original von Mikesoft
    Ich hab jetzt folgendes Versucht:

    GML-Quellcode

    1. ind=31999
    2. repeat(32000) {
    3. var_=variable_local_array_get(array,ind)
    4. if(string(ord(string(var_)))!="48") return ind
    5. ind-=1
    6. }


    Das funktioniert zwar, ist aber sehr sehr langsam. hat jemand eine bessere Idee?

    Wenn du wiklich so große Arrays benutz, solltest du Lists, eine GM-interne Datenstruktur, benutzen, die sind schneller bei so vielen Indizes.

    [EDIT] "Doch dann ist es zu spät..."

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Agnahim ()

  • Original von Mikesoft
    Ja, ich weiß was lists sind, und hab diese auch schon verwendet. Gibt es vielleicht eine Möglichkeit einen Array in eine List zu übertragen?

    Das geht nur "von Hand". d.h. alle Indizes einzeln per ds_list_add(id,val) hinzufügen.
  • naja nich ganz von hand.. das kann man ja recht einfach mit einer schleife löse
    www.glowingorb.de
    „Wenn es im Universum noch irgendwo intelligente Lebewesen gibt, dann kennen sie vielleicht Schach, höchstwahrscheinlich jedoch GO

    (Schachweltmeister Emanuel Lasker)