12.03.2014, 17:36 | #1 (permalink) |
Registriert seit: 10.10.2006
Beiträge: 263
|
If abfrage in Case umwandeln
Meine Frage an Euch währe gibt es einen Schöneren weg als 100 If Abfragen zu erstellen um herauszufinden wo man _menge eintragen muss
Code:
if (sname == "Daniel") then { Daniel = _menge; }; if (sname == "Peter") then { Peter = _menge; }; if (sname == "Hans") then { Hans = _menge; }; Gruß Nokman |
12.03.2014, 18:57 | #4 (permalink) |
Registriert seit: 15.05.2011
Beiträge: 1.109
|
in einem einigermaßen vernünftigen Deutsch: Meine Frage an euch wäre die Folgende. Gibt es einen anderen Weg um herauszufinden, wo man die Variable _menge eintragen muss, anstatt 100 IF-Abfragen zu erstellen. ***Script *** Dies wäre der momentane Weg. Doch bei 100 IF-Abfragen, wäre eine CASE-Funktion doch sinnvoller. Kann mir einer ein CASE Beispiel schreiben? |
12.03.2014, 19:44 | #5 (permalink) |
Registriert seit: 10.10.2006
Beiträge: 263
|
Vielen Dank Drunken Officer, Ich werde mich bei kommenden Anfragen gewählter Ausdrücken damit wir beide auf einen Nenner kommen können. Ich respektiere Ihre Arbeit im Forum beim Helfen von teilweise fremden Menschen bei Ihren Problemen. Nun hoffe ich das wir beide uns im nächsten Beitrag wiedersehen. Ein bitte hatte ich leider auch Vergessen gehabt das würde ich gerne noch nachholen! Vielen Dank für die Hilfestellung Freundlichen Grüßen Nokman |
12.03.2014, 21:07 | #6 (permalink) |
Registriert seit: 26.11.2006
Ort: Kiel, S-H
Alter: 57
Beiträge: 3.013
|
folgende Zeile speichert _menge in eine Variable je sname !
Code:
call compile (format["%1=%2",sname,_menge]); Wozu das auch immer gut sein soll
__________________
Nur ein Beispiel das zeigt wie BI "support" definiert: https://feedback.bistudio.com/T75547 Geändert von Lester (12.03.2014 um 21:09 Uhr). |
13.03.2014, 17:41 | #7 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Bei 100 Namen kann man das mit Arrays vereinfachen. Ein Beispiel für 3 Namen. Für jeden weiteren Namen ist dieser und die Punkte in den Array anzufügen.
Code:
//Arrays initialisieren: Namen = ["Daniel", "Peter", "Hans"]; Punkte = [0, 0, 0]; //Die weitere Verwendung der Arrays: sname = "Peter"; _menge = 50; //sname in Namen finden. _i = Namen find sname; // Der Index steht in _i (bei 3 Namen 0 bis 2) wenn kein Treffer dann -1 if (_i > -1) then { //_menge in Punkte hinzufügen Punkte set [_i, (Punkte select _i) + _menge]; //Namen mit neuen Punkten ausgeben hint format ["%1 Punkte: %2", Namen select _i, Punkte select _i] }; |
14.03.2014, 06:40 | #8 (permalink) |
Registriert seit: 10.10.2006
Beiträge: 263
|
Guten Tag Vienna,
Deine Lösung ist sehr "Umfangreich". Bei denn 3 Möglichkeiten die wir nun genant haben, stellt sich mir wieder die Frage welche von ihn die Ressourcen des Rechners am besten schonen würde? von Buliwyf Code:
_blub = switch (sname) do { case "Daniel" : {Daniel = _menge;}; case "Peter" : {Peter = _menge;}; case "Hans" : {Hans = _menge;}; }; Code:
//Arrays initialisieren: Namen = ["Daniel", "Peter", "Hans"]; Punkte = [0, 0, 0]; //Die weitere Verwendung der Arrays: sname = "Peter"; _menge = 50; //sname in Namen finden. _i = Namen find sname; // Der Index steht in _i (bei 3 Namen 0 bis 2) wenn kein Treffer dann -1 if (_i > -1) then { //_menge in Punkte hinzufügen Punkte set [_i, (Punkte select _i) + _menge]; //Namen mit neuen Punkten ausgeben hint format ["%1 Punkte: %2", Namen select _i, Punkte select _i] }; Code:
call compile (format["%1=%2",sname,_menge]); Geändert von Nokman (14.03.2014 um 06:42 Uhr). |
14.03.2014, 08:24 | #9 (permalink) |
Registriert seit: 26.11.2006
Ort: Kiel, S-H
Alter: 57
Beiträge: 3.013
|
Mir ist nur etwas unverständlich was Du damit vor hast, du machst letztendlich für jeden (Spieler)namen eine eigene Variable auf, um dann dort immer das letzte Ergebnis zuzuweisen ?
Ansonsten müßtest Du anstelle von Daniel = _menge doch eher Daniel = Daniel + _menge verwenden. Die Methode von Vieanna mit dem Array ist mit Sicherheit die mit Abstand flexibleste, das geht auch recht einfach zu initialisieren und man hat im nachherein auch noch weitgehest Kontrolle über die aufgelaufenen Daten. Namen = []; Punkte = []; Das Script macht dann nichts anderes als sname auf vorhandensein zu prüfen um dann im entsprechenden _menge Eintrag bei Punkte zu modifizieren oder eben halt wenn nicht vorhanden sname & dazugehörige _menge hinzuzufügen. Das hat nebenbei auch die Vorteile das man u.U. nicht immer weiß welche Namen alles aufschlagen werden. In der Array Variante kannste es überprüfen, in der call compile Kurzform wird zwar was gemacht, aber im Nachherein weiß Niemand welche Namen dort alles aufgelaufen sind. Hab das auch nur als Kurzform zu deinen Ansatz gepostet um Anregungen zu schaffen ohne den Zweck zu hinterfragen.
__________________
Nur ein Beispiel das zeigt wie BI "support" definiert: https://feedback.bistudio.com/T75547 |
14.03.2014, 10:02 | #10 (permalink) |
Registriert seit: 03.01.2008
Alter: 84
Beiträge: 6.552
|
Kein Mensch benutzt mehr call compile format um globalen Variablen dynamische Werte zuzuweisen... Es sei denn es ist einem egal das es 3-4 mal langsamer als die elegantere Lösung mittels missionNamespace ist
Xeno
__________________
In arma everything is made of refined explodium, armored with wet paper towels. |
14.03.2014, 11:07 | #11 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Durch eine kleine Ergänzung (else) sind keine Namen und Punkte mehr vorzugeben. Wird ein Name nicht gefunden, dann wird er dem Array Namen hinzugefügt, ebenso seine Punkte im Array Punkte.
Code:
//Arrays initialisieren: Namen = []; Punkte = []; //Die weitere Verwendung der Arrays: sname = "Peter"; _menge = 50; //sname in Namen finden. _i = Namen find sname; // Der Index steht in _i (ab 0). Wenn kein Treffer dann -1 if (_i > -1) then { //_menge zur vorhandenen in Punkten hinzufügen Punkte set [_i, (Punkte select _i) + _menge]; } else { //Array-Feld für neuen Namen im Array Namen hinzufügen Namen = Namen + [sname]; //Array-Feld für den Wert dieses Namens im Array Punkte hizufügen Punkte = Punkte + [_menge]; //letzten Index feststellen _i = count Namen - 1 }; //Namen mit den Punkten ausgeben hint format ["%1 Punkte: %2", Namen select _i, Punkte select _i]; |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
Themen-Optionen | |
Ansicht | |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Fragen zum Editor | chris2110 | Editing & Scripting | 1014 | 25.08.2014 23:25 |
Abfrage eines Arrays | Togo | Editing & Scripting | 12 | 11.06.2013 19:19 |
Day & Weather Script | Moerderhoschi | Editing & Scripting | 13 | 02.12.2012 10:29 |
ALICE und SILVIE | Troublemaker | Editing & Scripting | 12 | 12.10.2012 16:06 |
BIEDI in SQM umwandeln? | Natalon | Editing & Scripting | 6 | 27.06.2011 20:42 |