Armed-Assault.de Twitter
 
 
Themen-Optionen Ansicht
Alt 12.03.2014, 17:36   #1 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Registriert seit: 10.10.2006
Beiträge: 263
Standard 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;
};
Das währe der momentane weg doch bei 100 Ifabfragen währe doch ein Case sinvoller nur wie würde der gehen?

Gruß
Nokman
Nokman ist offline  
Alt 12.03.2014, 18:12   #2 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Buliwyf
 
Registriert seit: 11.03.2005
Ort: HH
Alter: 52
Beiträge: 1.930
Standard

Code:
_blub = switch (sname) do {
		case "Daniel" : {Daniel = _menge;};
		case "Peter" : {Peter = _menge;};
		case "Hans" : {Hans = _menge;};
};
__________________
Buliwyf ist offline  
Alt 12.03.2014, 18:24   #3 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

https://community.bistudio.com/wiki/Control_Structures
Vienna ist offline  
Alt 12.03.2014, 18:57   #4 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.109
Standard

Zitat von Nokman Beitrag anzeigen

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]Das währe der momentane weg, doch bei 100 Ifabfragen währe doch ein Case sinvoller. Nur wie würde der gehen?

Gruß
Nokman

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?
Drunken Officer ist offline  
Alt 12.03.2014, 19:44   #5 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Registriert seit: 10.10.2006
Beiträge: 263
Standard

Zitat von Drunken Officer Beitrag anzeigen

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?

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
Nokman ist offline  
Alt 12.03.2014, 21:07   #6 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Lester
 
Registriert seit: 26.11.2006
Ort: Kiel, S-H
Alter: 57
Beiträge: 3.013
Standard

folgende Zeile speichert _menge in eine Variable je sname !
Code:
call compile (format["%1=%2",sname,_menge]);
Ganz ohne switch oder if.

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).
Lester ist offline  
Alt 13.03.2014, 17:41   #7 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

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]
  };
Hier gibt es was über Array zu lesen: https://community.bistudio.com/wiki/Array
Vienna ist offline  
Alt 14.03.2014, 06:40   #8 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Registriert seit: 10.10.2006
Beiträge: 263
Standard

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;};
};
von Vienna
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]
  };
von Lester
Code:
call compile (format["%1=%2",sname,_menge]);
Wobei ich die drite alleine vom Umfang her bevorzuge da es mit ihr ohne Änderungen ins fast Unendliche erweitern lässt.

Geändert von Nokman (14.03.2014 um 06:42 Uhr).
Nokman ist offline  
Alt 14.03.2014, 08:24   #9 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Lester
 
Registriert seit: 26.11.2006
Ort: Kiel, S-H
Alter: 57
Beiträge: 3.013
Standard

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
Lester ist offline  
Alt 14.03.2014, 10:02   #10 (permalink)
10 Jahre hx3
5000 Beiträge
 
Benutzerbild von Xeno
 
Registriert seit: 03.01.2008
Alter: 84
Beiträge: 6.552
Standard

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.
Xeno ist offline  
Alt 14.03.2014, 11:07   #11 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

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];
Noch schwerer verständlich?
Vienna ist offline  
 


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ä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


Kontakt - HX3.de - Archiv - Nach oben

Angetrieben durch vBulletin, Entwicklung von Philipp Dörner & Tobias



SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119