Nehmen Sie jedes Element in der Liste und machen Sie es mithilfe einer For-Schleife zu einer leeren Liste.Hallo ,
Wie kann ich Variablennamen erstellen und sie mithilfe einer For-Schleife als leere Liste zuweisen?
Zum Beispiel:
var_list = {"Tag", "heute", "Regen", "Mittelwert"};
Durchlaufen der var_list erhalten Sie:
Tag = {};
heute={};
Regen={};
Mittelwert={};
Automatisierung und SkriptingBetreff: Jedes Element in der Liste mithilfe einer For-Schleife in eine leere Liste umwandelnTu das nicht. Ich würde vorschlagen, diese als Schlüssel für ein assoziatives Array zu erstellen und ihnen eine leere Liste als Wert zuzuweisen.
Names Default To Here(1);
var_list = {"day", "today", "rain", "mean"};
aa = Associative Array(var_list, Repeat({{}}, N Items(var_list)));Betreff: Jedes Element in der Liste mithilfe einer For-Schleife in eine leere Liste umwandelnGibt es einen negativen Grund, dafür keine For-Schleife zu verwenden?
Außerdem möchte ich später einige Berechnungen durchführen und dem assoziativen Array Werte hinzufügen. Anschließend wandele ich das assoziative Array in eine Tabelle um. Unten sehen Sie ein Beispiel, wie ich das mache. Der Wert von aa ist korrekt mit {{}, {}, {"3", "2"}, {"A", "b"}}, aber die erstellte Tabelle enthält nur Werte in :rain. Ich vermute, das liegt daran, dass der Standardspaltendatentyp von JMP numerisch+kontinuierlich ist.
1) Gibt es eine bessere/schnellere oder zwingendere Möglichkeit, ein assoziatives Array in eine Tabelle umzuwandeln, ohne den Spaltendatentyp definieren zu müssen?
keys = aa << get keys;
check= {"col_today", "col_rain"};
col_today = {"A", "b"};
col_rain = {"3","2"};
for (j=1, j<=nitems(check), j++,
for (i=1, i<=nitems(keys), i++,
if(word(-1, check[j], "_") == keys[i],
aa << Insert(keys[i],eval(parse(check[j])));
);
);
);
values1 = aa << get values;
tb = new table();
for (i = 1, i <= nitems(keys), i++,
tb << new column(char(keys[i]), , set values(values1[i]));
)
missing :today value because it is character
Betreff: Jedes Element in der Liste mithilfe einer For-Schleife in eine leere Liste umwandelnDer Umgang mit dynamisch erstellten Variablennamen führt oft zu einem Chaos und es gibt Datenstrukturen, die bei dieser Art der Skripterstellung helfen, sodass Sie sich nicht auf dynamische Variablennamen verlassen müssen.
Eine Möglichkeit besteht darin, JSON zu durchlaufen und JMP die Daten-/Modellierungstypen entscheiden zu lassen
Names Default To Here(1);
aa = Associative Array();
aa["a"] = {"A", "B"};
aa["b"] = {"1", "2"};
aa["c"] = {1, 2};
dt = JSON To Data Table(As JSON Expr(aa), Guess(Stack(1)));
Oder erstellen Sie alle Spalten und Zeichen und konvertieren Sie dann diejenigen, die in numerische umgewandelt werden können
Betreff: Jedes Element in der Liste mithilfe einer For-Schleife in eine leere Liste umwandelnIch stimme mit Jarmos Beitrag überein, aber ich denke, das hier erfüllt Ihre Frage:
Names Default To Here( 1 );
var_list = {"day", "today", "rain", "mean"};
var_list_list = {};
For Each( {var, i}, var_list, Insert Into( var_list_list, Parse( Eval Insert( "^var^ = {};" ) ) ) );
var_list_list;Betreff: Jedes Element in der Liste mithilfe einer For-Schleife in eine leere Liste umwandelnIch denke, Sie müssen möglicherweise Eval List(var_list_list); hinzufügen, um die Variablen einmal zu initialisieren.
Ich halte so etwas für eine so schlechte Idee, dass ich nicht einmal eine Option dafür anbieten möchte, aber trotzdem... hier ist eine
Mehr anzeigen...
Names Default To Here(1);
var_list = {"day", "today", "rain", "mean"};
For Each({var, i}, var_list,
Eval(EvalExpr(Assign(Expr(Parse(var)), {})));
);
show(day, today, rain, mean);