Simple Array System

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Guten Mittag liebe Brotfische :)


    Heute zeige ich euch mal ein kleines, aber sehr nützliches System.


    Funktionen:
    //Normale Array-Funktionen:
    GetArray(string[])<string2[]> //returnt die Daten als String
    GetArrayInt(string[])<string2[]> //returnt die Daten als Int
    GetArrayFloat(string[])<string2[]> //returnt die Daten als Float


    //Index Arrays:
    CountIndexArray(array[]) //Gibt die Anzahl der Elemente im index-Array wieder
    SortIndexArray(array[]) //Sortiert die Elemente
    GetIndexArray(array[])<idx> //Gibt das Element an dem Index wieder (als Integer)


    //Zum Laden:
    LoadArray(Pfad[]);
    LoadArrayEx(Pfad[]+Name[]+Endung[]);
    //returnt den Array als string


    //Zum Speichern:
    SaveArray(Pfad[], Array[]);
    SaveArrayEx(Pfad[]+Name[]+Endung[], Array[]);


    //Zusätzliche Funktion:
    Push(variable, array[]); //schreibt das array in die variable
    //Zusätzliche "Features", siehe unten


    Das sieht etwas wirr aus, also ich versuche euch nun mal zu erklären, was ihr damit alles machen könnt.


    Ein zusätzliches Feature ist, ihr könnt ein Array direkt returnen:


    stock func() return->Array("day: 6;month: 10;year: 2014;");


    Das Array muss immer so aufgebaut sein:


    "xxx: Value;"
    //xxx = Hiernach wird immer gesucht
    //Value = Der Wert, wenn xxx gefunden wurde
    //; = Das Semikolon beendet die eine Spalte des Arrays


    Wie in dem Beispiel gezeigt, kann man dann ganz viele Spalten hintereinander hängen.


    Um uns das Datum korrekt ausgeben zu lassen, können wir einfach das machen:


    //Also fangen wir langsam an:
    new d = GetArrayInt(func())<"day">; //GetArrayInt brauchen wir, da day ja ein Integer (eine Zahl) ist.
    new m = GetArrayInt(func())<"month">; //GetArrayInt brauchen wir, da month ja ein Integer (eine Zahl) ist.
    new y = GetArrayInt(func())<"year">; //GetArrayInt brauchen wir, da year ja ein Integer (eine Zahl) ist.


    printf("Datum: %02d.%d.%d",d,m,y);
    //Output: Datum: 06.10.2014


    Normale Arrays Speichern & Laden:
    Wollen wir ein schlichtes Array speichern, können wir das z.B. so machen:


    new array[] = "day: 6;month: 10;year: 2014;"; //Das ist unser Array
    SaveArray("array.txt",array); //Jetzt speichern wir in der array.txt das array


    //Um das Array wieder zu laden, einfach folgendes machen:
    new array[_b_Data];
    Push(array,LoadArray("array.txt"));
    //Jetzt kann man damit weiter arbeiten, einfach dann so:
    printf("Heute ist Tag: %02d",GetArrayInt(array)<"day">);


    z.B. Spieler Arrays Speichern & Laden:
    Mal ein kleines Beispiel, wie man entweder einen komplexen Pfad oder Spieler ohne format speichern&laden kann:


    new array[] = "geld: 1000;level: 5;"; //Das ist wollen wir jetzt speichern
    new name[] = "Gustav";
    SaveArrayEx("/"+name+".txt",array); //Jetzt speichern wir das direkt in den scriptfiles unter Gustav.txt
    //anderes Beispiel:
    SaveArrayEx("/Accounts/"+name+".ini",array); //Jetzt speichern wir das z.B. unter /Accounts/Gustav.ini
    //Natürlich kann man auch Funktionen anwenden:
    SaveArrayEx("/Accounts/"+GetName(playerid)+".ini",array); //Jetzt speichern wir das z.B. unter /Accounts/Gustav.ini


    //Das Alles was für SaveArrayEx gilt, gilt auch für LoadArrayEx


    //Um das Array wieder zu laden, einfach folgendes machen:
    new array[_b_Data];
    Push(array,LoadArrayEx("/"+name+".txt"));
    //Jetzt kann man damit weiter arbeiten, einfach dann so:
    printf("Du hast %d$",GetArrayInt(array)<"geld">);
    //Output: Du hast 1000$


    Index-Arrays:
    Also, dann zeige ich euch mal, was ihr hiermit alles machen könnt:


    stock func() return->Array("idx: 9, 3, 12,9, 139, 1293, 12");
    So zum Beispiel sähe ein Index-Array aus.
    Ihr müsst es nur mit dem idx: an 1. Stelle kennzeichnen und dann könnt ihr die Variablen zurückgeben.
    Ihr müsst nicht auf Leerzeichen achten, nur das Kommas die Elemente trennen.


    Wichtig: Ein Index-Array darf nur aus Zahlen bestehen und dem idx: an 1. Stelle, sonst funktioniert es nicht.


    Wenn wir jetzt das 1. Element oder 2. Element abfragen wollen, sähe das so aus:


    new first = GetIndexArray(func())<0>;
    new sec = GetIndexArray(func())<1>;
    printf("First: %d | Second: %d",first,sec);
    //Gibt aus: First: 9 | Second: 3


    So, wenn wir das ganze Array mal sortieren wollen, sähe das so aus:


    new tmp[_r_Data];
    Push(tmp, SortIndexArray(func())); //Hier sortieren wir das IndexArray und speichern es in tmp


    //Und jetzt können wir mal alle Elemente Sortiert ausgeben:
    /*
    Kleine Information:
    CountArrayIndex(tmp) gibt 7 wieder, da es 7 Elemente gibt (0-6)
    */
    for(new i,l=CountArrayIndex(tmp); i<l; i++)
    {
    printf("Element: %d | Wert: %d",i,GetIndexArray(tmp)<i>);
    }
    /*
    Das sieht dann so aus:


    Element: 0 | Wert: 3
    Element: 1 | Wert: 9
    Element: 2 | Wert: 9
    Element: 3 | Wert: 12
    Element: 4 | Wert: 12
    Element: 5 | Wert: 139
    Element: 6 | Wert: 1293
    */


    PS: Das Array Index könnt ihr auch ganz einfach so speichern & laden, wie das normale Array.


    Speedtest:
    Also,10.000 Abfragen mit GetArray()<> dauern nur: 15ms
    Und 10.000 Abfragen für das IndexArray sind: 18ms
    Und das speichern und laden, basiert (wenn man sich den Source anschaut) unmittelbar auf den f-Functions, somit kann man das nicht direkt schneller lösen.


    Mal als kleine Information:
    100x das Index Array (Beispiel von oben) zu sortieren, dauert: 2ms (und ich greife auf die Funktion mit dem array zu...)


    Download:
    Source-Code: Pastebin
    Direkter-Download: MediaFire


    Schlusswort:
    Ich würde mich über ein kleines Feedback freuen :)
    Falls Fragen bestehen oder ihr Vorschläge habt, einfach schreiben :)


    mfg. :thumbup:


    //Edit: Link
    //Edit²: ->Array Funktion
    //Edit³: Neue Array-Index Funktionen
    //Edit4: Push Funktion verbessert
    //Edit5/6: Links

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

    6 Mal editiert, zuletzt von Kaliber ()

  • Kann man damit auch mehrere variablen Returnen, oder nur im Format oder gar nicht?


    Darum geht es doch, dass du das kannst.


    Schau z.B. so:


    //Edit: Neue Funktion gemacht:


    stock mehrereVariablen()
    {
    new x=1,y=2,z=3;
    return->Array("x: %d;y: %d;z: %d;",x,y,z);
    }


    //Auslesen:
    new x = GetArrayInt(mehrereVariablen())<"x">; //x = 1


    Hat jemand noch Fragen bzw Vorschläge? :)


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

    3 Mal editiert, zuletzt von Kaliber ()

  • Das soll jetzt kein Angriff sein, aber wofür gibt es JSON?


    Hast du dir eigentlich mal durchgelesen, worum es geht? :huh:


    Du kannst doch in Pawn mit JSON gar nichts anfangen... :wacko:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Ja und mit JSON kannst du arrays genauso zurückgeben, ich frage lediglich!
    Hab eben gegooglet JSON gibs bei SAMP in Pawn schon: http://forum.sa-mp.com/showthread.php?t=48439


    Ja, das ist JSON und das was ich hier geschrieben habe sind Array-Funktionen.


    JSON ist eine riesen Library die eigentlich ganz andere Funktionen bietet, als das was ich geschrieben habe...


    Natürlich kannst du beides verwenden um Arrays zu erstellen, nur mit meinem System ist es wesentlich einfacher und schneller diese zu handhaben, als mit JSON.


    mfg. :rolleyes:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen