Elenco di espressioniVorrei creare un elenco simile a questo.
LL = {parm1 = "x", valore1 = 5, parm2 = "y", valore2 = 3, ...}
La lunghezza può variare, quindi lo sto facendo in un ciclo e sto provando a utilizzare l'indice del ciclo nel nome della variabile.
Ma ho difficoltà a creare quel termine (ad esempio parm1).
Qual è il modo migliore per farlo?
Re: Elenco di espressioniEcco un altro modo per farlo. Simile alla tua soluzione finale.
// LL = {parm1 = "x", value1 = 5, parm2 = "y", value2 = 3, ...}
// Assume parameters and value labels are sequential
parm_list = {"x", "y", "z"};
value_list = {5, 3, 1};
pval_list = {};
for (i = 1, i <= nitems(parm_list), i++,
one_parm = evalinsert("\[parm^i^ = "^parm_list[i]^"]\");
one_val = evalinsert("\[value^i^ = ^value_list[i]^]\");
insertinto(pval_list, parse(one_parm));
insertinto(pval_list, parse(one_val));
);
pval_list;Re: Elenco di espressionimi sembra davvero che tu possa fare un elenco di array associativi o array associativi nidificati, se lo desideri. Quindi non devi analizzare le stringhe per creare la tua struttura dati e trovo che sia MOLTO più facile da leggere (quando analizzi le stringhe per creare variabili, perdi la possibilità di eseguirle o passare il mouse sopra per vederle. )
Names Default to here(1);
testparam1 = 1;
fitparam1 = 2;
Rsq1 = 3;
testparam2 = 4;
fitparam2 = 5;
Rsq2 = 6;
//list of associative arrays
Laa = {};
//param1 insert
insert into(Laa, associative array({"TestParam", "FitParam", "Rsq"}, Evallist({testparam1, fitparam1, Rsq1})) );
//param2 insert
insert into(Laa, associative array({"TestParam", "FitParam", "Rsq"}, Evallist({testparam2, fitparam2, Rsq2})) );
show(Laa[1]["TestParam"], Laa[2]["TestParam"]);
//nested associative arrays
Naa = associative array();
//param1 insert
Naa["name1"] = associative array({"TestParam", "FitParam", "Rsq"}, Evallist({testparam1, fitparam1, Rsq1}));
//param2 insert
Naa["name2"] = associative array({"TestParam", "FitParam", "Rsq"}, Evallist({testparam2, fitparam2, Rsq2}));
show(Naa["name1"]["FitParam"], Naa["name2"]["FitParam"]);
ritorna
Laa[1]["Paratest"] = 1;
Laa[2]["Parametro test"] = 4;
Naa["name1"]["FitParam"] = 2;
Naa["name2"]["FitParam"] = 5;
il vantaggio del nidificato è davvero solo se ti aspetti che l'ordine cambi e la posizione conta.
Re: Elenco di espressioniNon valuterò quale sia il migliore.Ma ho trovato entrambi gli esempi utili per capire come funziona.
Alla fine il mio codice sembrava così.Nota: questo non funzionerà come è poiché non definisco alcune cose qui.
Questo è in un ciclo con indice k.Un elenco di elenchi memorizza tutti i risultati.
Lista LL = {};
Inserire (Llista, Analizza ( "TestParam" || car (k)|| "=\!"" ||Modalità[k]|| "\!"" )); // Prova il nome del parametro
Inserire (Llista, Analizza ( "FitParam" || car (k)|| "=\!"" ||dtStats[ 1 , 1 ]|| "\!"" )); // Adatta nome parametro
Inserire (Llista, Analizza ( "Rq" || car (k)|| "=" || car (dtStats[ 1 , 3 ]))); // Rquadrato
Re: Elenco di espressioniIl modo migliore?" Stai cercando di iniziare una rissa nella comunità JMP?
C'è più di un modo per risolvere questo problema. La decisione su quale sia la strada migliore dipende da diversi criteri. Ecco un'altra soluzione candidata che è diversa dalla soluzione di Jim ma non necessariamente migliore.
Names Default To Here( 1 );
// List the variable names
name list = { "Cool", "Awesome", "Bad" };
// List the variable values
value list = { 1, 2, 3 };
// Prepare an empty container for assignments
name value list = {};
// Make the list of assignments
For( i = 1, i <= N Items( name list ), i++,
// Start with function with no arguments
assign expr = Expr( Assign() );
// Add first argument
Insert Into( assign expr, name list[i] );
// Add second argument
Insert Into( assign expr, value list[i] );
// Add function to assignment list
Insert Into( name value list, Name Expr( assign expr ) );
);
Show( name value list );
Ora hai una scelta. (Scommetto che ne avrai un altro da un momento all'altro.) Scegli tu.
Re: Elenco di espressioniEcco un pezzo di codice simile per generare un elenco
Names Default To Here( 1 );
dt = New Table( "Untitled 36", Add Rows( 3 ),
New Column( "Column 1", Character, "Nominal",
Set Values( {"1", "2", "3"} ) ) );
NamesList = {"Cool", "Awsome", "Bad"};
ValuesList = Column( dt, 1 ) << get values;
NamesValuesList = {};
// Build the Value Labels List
For( i = 1, i <= N Items( NamesList ), i++,
Insert Into( namesvalueslist,
Parse( ValuesList[i] || " = \!"" || NamesList[i] || "\!"" ) )
);