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.
//Edit: Link
//Edit²: ->Array Funktion
//Edit³: Neue Array-Index Funktionen
//Edit4: Push Funktion verbessert
//Edit5/6: Links