Forzare una lista di pedici sempre per essere una lista?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ecco uno snippet di codice:
a = { "A", "B", "C", "D", 123};
sub1 = lista (1,3,5);
sub2 = list (1);
mostra (a [sub1]);
mostra (a [sub2]);
Produzione:
a [sub1] = {"A", "C", 123};
a [sub2] = "A";
C'è un modo per iscrivere una lista con un numero arbitrario di elementi e avere sempre l'output come lista?
Ri: Forzare una lista abbonata per essere sempre una lista?Ciao Martin,
Questo è qualcosa che stiamo "aggiustando" per JMP 13. Inserisco "fixing" tra virgolette perché è possibile che alcuni script legacy dipendano dal vecchio comportamento e considereranno la correzione come un'interruzione. Se questo risulta essere un grosso problema, potremmo dover trovare un'alternativa.
io è bello vedere il tuo messaggio che supporta l'idea di una correzione.
Ri: Forzare una lista abbonata per essere sempre una lista?Ecco una migliore che funziona su liste di liste.
a = {{ "A"}, { "B"}, { "C"}, { "D"}, {123}};
sub1 = lista (1,3,5);
sub2 = list (1);
ForceList = Funzione ({forceme},
If (Is List (forceme), forceme, EvalList (List (forceme)))
);
SubscriptList = Function ({inlist, subscriptlist},
if (N items (subscriptlist) == 1,
EvalList (Lista (InElenco [subscriptlist]))
,
InElenco [subscriptlist]
)
);
Produzione:
show (ForceList (a [sub1]));
show (ForceList (a [sub2]));
{{"A"}, {"C"}, {123}};
{"UN"};
mostra (SubscriptList (a, sub1));
show (SubscriptList (a, sub2));
{{"A"}, {"C"}, {123}};
{{"UN"}};
Ri: Forzare una lista abbonata per essere sempre una lista?Sì, è un po 'quello che ho capito. Ho scritto una semplice "funzione di supporto" che penso di poter usare nelle liste di pedici. Grazie!
ForceList = Funzione ({forceme},
If (Is List (forceme), forceme, EvalList (List (forceme)))
);
show (ForceList (a [sub1]));
show (ForceList (a [sub2]));
Produzione:
{"A", "C", 123};
{"UN"};
Ri: Forzare una lista abbonata per essere sempre una lista?Quando il tuo indice ha solo un valore, restituirà sempre il valore singolo. Se il tuo indice è un elenco con più valori, restituirà tutti i valori sotto forma di elenco.
Per aggirare questo problema è necessario un comando If per verificare quanti valori sono presenti nel proprio elenco di pedici e avvolgere il ritorno se il pedice ha un solo valore.
Ecco un esempio che ho messo insieme:
un = { "UN" , "B" , "C" , "D" , 123 } ;
sub1 = Elenco ( 1 , 3 , 5 ) ;
sub2 = Elenco ( 1 ) ;
Eval ( Eval Espr ( indicesList = { expr ( sub1 ) , expr ( sub2 )} ) ) ;
Per ( io = 1 , io <= N articoli ( indicesList ) , io ++,
Se ( N articoli ( indicesList [ io ] ) > 1 ,
Temp = un [ indicesList [ io ]] ,
Temp = Eval ( Eval Espr ( Elenco ( expr ( un [ indicesList [ io ]] ) ) ) )
) ;
Mostrare ( Temp ) ;
) ;