Home
Scripts
Games
Referenz
     Basics:
   · Variablen
   · Datentypen
   · Operatoren
   · Funktionen
   · Pragmas
   · if else
   · while
   · for
     Libraries:
   · Lang
   · Float
   · String
   · URL
   · WMLBrowser
   · Dialogs
   · Crypto
   · WTAPublic
     Extras:
   · Arrays
   · Sortieren
   · Mathematik
Links
Gäste
Kontakt

< Arrays >


Programmieren mit Arrays in WMLScript.

WAP-Standard: 1.1+

Einfache Arrays, wie man sie etwa von JavaScript her kennt, in der Form:
var a = new Array(); a[0] = 7; a[1] = 22; usw.,
gibt es in WMLScript leider nicht.

Jedoch eröffnet die String-Bibliothek die Möglichkeit, Arrays als Strings zu definieren und unter Verwendung einiger Hilfsfunktionen, einzelne Werte auszulesen oder zu verändern.

Eine Alternative mittels der WMLBrowser-Library wird weiter unten besprochen.


Array definieren:

Je nach Umfang und Inhalt des Arrays, bieten sich verschiedene Konstruktionen an.

Am Einfachsten geht es so:

var a = "7 11 344 102 221";

Sind die Werte nicht bekannt, werden Dummys gesetzt:

var a ="0 0 0 0 0";

Und sind es viele Werte:

var i,a="0";
for(i=1;i<100;i++) a+=" 0";

Die Verwendung des Leerzeichens " " als Seperator, verursachte bei einigen Tests überings vereinzelt Schwierigkeiten und sollte bei eventuellen Problemen als Fehlerquelle in Betracht gezogen werden. Mit einem "_" z.B., sind Sie im Zweifelsfalle immer auf der sicheren Seite.


Array-Wert auslesen:

Um den i-ten Wert im Array a zu ermitteln, wird eine Hilfsfunktion erstellt:

function val(a,i) {
  return String.elementAt(a,i," ");
}

Die Zählung beginnt wie üblich bei 0.
Abgefragt wird nun z.B. der 3te Wert des obigen Arrays (344) einfach mit:

val(a,2);

Beachten Sie bitte, dass der Rückgabewert zunächst nur ein String ist und bei Bedarf noch umgewandelt werden muss.


Array-Wert ändern:

Geändert wird ein Wert im Array a, durch Austausch des alten Werts an der Stelle i mit dem neuen Wert v. Dazu ist folgende Hilfsfunktion nützlich:

function rep(a,i,v) {
  return String.replaceAt(a,v,i," ");
}

Soll z.B die 344 durch 132 ausgetauscht werden, geschieht dies durch:

a = rep(a,2,132);


Ein Anwendungs-Beispiel für ein solches Array finden Sie etwa im Lotterie-Script.

Statt Ganzzahlen können Sie natürlich auch Fließkommazahlen oder beliebige andere Strings verwenden. Dazu muss die Funktion val(a,i) nur entsprechend angepasst werden.
Informationen dazu finden Sie in den Bibliotheken Lang, Float und String.


Mehrdimensionale Arrays:

Durch eine geeignete Verschachtelung lassen sich Arrays in beliebig vielen Dimensionen erstellen.
Für jede Dimension ist dabei ein eigener Seperator notwenig.

Ein zweidimensionales Array könnt z.B. so aussehen:

var a = "12a 3 23 45_17 399 5xy 11_67 443m 2.2 27";

Die oben beschriebenen Hilfsunktionen müssen dann folgendermaßen angepasst werden:

function val(a,i,j) {
  return String.elementAt(String.elementAt(a,i,"_"),j," ");
}

function rep(a,i,j,v) {
  var x = String.replaceAt(String.elementAt(a,i,"_"),v,j," ");
  return String.replaceAt(a,x,i,"_");
}


Altenative: Arrays mit der WMLBrowser-Library:

Diese sind intiutiver und übersichtlicher zu handhaben, jedoch weniger flexibel und bei größeren Berechnungen auch langsamer und ressourcenintensiver, da jeder Wert einzeln gespeichert wird.

Ein zweidimensionaler Array-Wert, z.B. aij = 35, wird mit setVar so erzeugt und an den WML-Browser übergeben:

WMLBrowser.setVar("a"+i+j, 35);

Und im geeigneten Moment mit getVar so wieder ausgelesen:

WMLBrowser.getVar("a"+i+j);

Trotz seiner Mängel sind diese Art von Arrays gelegendlich recht nützlich. Ein Anwendungs-Beispiel dazu finden Sie z.B. im 4 Gewinnt Script.




Copyright © 2002-2003 by wmlscript.de - Alle Rechte vorbehalten
Impressum | Datenschutz | eMail