da meine frage in nem anderem thread einfach untergegangen ist mache ich hier mal nen neuen auf ...
mein problem ist: die neuen Befehle stehen nicht im MSCIHandbook und per foren suche finde ich hier auch nix ...
am wichtigsten wäre mir z.b. wenn jemand weiss,
1. welche befehle neu sind <- ok das kann ich noch per abgleich machen
2. wofür die gut sind und das auch verständlich erklären kann
3. wie man mir helfen kann, so das dieser thread hier nützlicher natur wird ...
Lucike wrote:Ich bin gestern über ein paar neue Array-Befehle gestolpert. Sind die mit V1.3 gekommen oder waren sie schon vorher verfügbar?
So wie es ausschaut geht es hier um multidimensionale Arrays. Zum Test war es gestern zu spät. Werde ich nachholen, ist aber für andere vielleicht ebenfalls interessant.
1. <RetVar/IF> <Var/Array>[<Var/Number>][<Var/Number>]
2. <Var/Array>[<Var/Number>][<Var/Number>] = <Value>
3. <Var/Array>[<Var/Number>] = <Var/Array>[<Var/Number>]
F: In wie weit unterscheidet sich der Befehl 3 vom Copy- oder Clone-Befehl?
F: Kann auf eine m-dem Array auch den Append-, Remove- und Resize-Befehl ausgeführt werden?
Gruß
Lucike
sollten hier neue Infos reinkommen werd ich diese immer auf der ersten seite hier aktualisieren ...Orka wrote:Was ich vermisse ist ein Ubound Befehl wenn das wircklich 2 Dimensionale Arrays sind und Wie Allociert man die den? size=1dim*2dim?
/edit
NEUES
Geheimnis um Arrays gelüftet!
(danke an ticaki für die hilfestellung)
<var/if>=<var/array>[<var/val>][<var/val>]
<var/array>[<var/val>][<var/val>]=<var>
praktische Verwendung beider Befehle:
Code: Select all
001 $x = 5
002 $y = 5
003 * INITIALISIERUNG
004 $arDim1 = array alloc: size=$x
005 $i = 0
006 while $i < $x
007 $arDim2 = array alloc: size=$y
008 $arDim1[$i] = $arDim2
009 inc $i =
010 end
011 * BEFUELLUNG
012 $i = 0
013 while $i < $x
014 $j = 0
015 while $j < $y
016 $input = 'Spalte: ' + $i + ' Zeile: ' + $j + ' - '
017 $arDim1[$i][$j] = $input
018 inc $j =
019 end
020 inc $i =
021 end
022 * AUSLESUNG
023 $i = 0
024 $output = ''
025 while $i < $x
026 $j = 0
027 while $j < $y
028 $feld = $arDim1[$i][$j]
029 $output = $output + $feld
030 inc $j =
031 end
032 inc $i =
033 end
034 write to player logbook $output
035 return null
Es gibt eine Möglichkeit in X³ ein 2-Dimensionales Array zu "simulieren".
und zwar wird dafür in jedes Feld eines normalen Arrays ein weiteres Array hinein-initialisiert.
Mit den beiden obigen Befehlen kann man nun über den 2ten Index des ersten Arrays das zweite Array in jedem Feld des ersten Arrays ansprechen, ohne seinen Namen zu kennen. Der 2te Index wird sozusagen als erster Index des 2ten Arrays übergeben.
was für mich wie ein "hack" aussieht, ist die Tatsache, daß man soviele gleichnamige Arrays hat, wie das erste Array Felder besitzt, offensichtlich ist der SE in der Lage stressfrei damit fertig zu werden ...
(Hab jezt mehrere Testreihen, mit verschiedensten Werten gemacht. und niemals "falschwerte" bekommen. Tests in Bezug mit Zugriff mit einfachen Befehlen auf das 2-dim array hab ich nicht durchgeführt)
der Vorteil von 2-dim Arrays gegenüber 1-dim Arrays, hängt vom Verwendungszweck ab:
z.B.:
einfache Arrays werden meistens dazu benutzt eine Liste von Objekten zu haben, auf die man einfach (per index) zugreifen kann ... z.b. Array von Schiffen in Sektor.
Möchte man jetzt Zusatzinformationen zu den einzelnen Schiffen aus diesem Array sammeln, benutzt man ein weiteres, ein 2-dim Array.
Die 2te Dimension sollte hier feststehen, nämlich die Anzahl der Zusatzinformationen.
so ...

nun beginnt man, indem man das erste Array mit der größe der Anzahl der Schiffe, die man gefunden hat und der Menge der Zusatzinfos zu initialisieren.
Danach fragt man über das Schiffe-Array das gewünschte Schiff ab, sammelt seine infos darüber und legt sie in das neue Array ... fertig ...
Was man dann hat, ist eine Tabelle(2-dimArray) von Listen(1-dimArray).
wobei die Länge des Tabellen(2-dim)Arrays die Anzahl der Spalten und
die Länge des Listen(1-dim)Arrays die Anzahl der Zeilen ist.
so eine Tabelle also? ... hmm wie in Excel?
genau ... das ist (bis auf die umständliche Art der Anwendung) ein wächtiges Merkzeug

----------------keine ahnung in wieweit die folgenden gedanken berechtigt sind, vielleicht äussert sich da jemand mit mehr ahnung als ich
nur übertreiben sollte man es nicht mit diesen schönen sachen, denn der Arbeitsspeicher leidet wohl sehr unter dieser Konstruktion ...
also keine tabelle mit 100 spalten und 100 zeilen machen, das wären dann 10.101 Variablen, die ihr da erzeugt ...
da der SE ja recht datentyp-frei arbeitet, gehe ich davon aus, daß er für jede Variable den maximal-Wert reserviert ...
(fragt mich nich wieviel das ist ... ich denk da nur an 1byte pro zeichen, was bei strings dann doch viel werden kann. Zumal die Var z.b. <var/station> ja auch aus name+sektor besteht)