Eine subskribierte Liste zwingen, immer eine Liste zu sein?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hier ist ein Code-Snippet:
a = {"A", "B", "C", "D", 123};
sub1 = Liste (1,3,5);
2 = Liste (1);
zeigen (a [1]);
zeigen (a [₂]);
Ausgabe:
a [sub1] = {"A", "C", 123};
a [₂] = "A";
Gibt es eine Möglichkeit, eine Liste mit einer beliebigen Anzahl von Elementen zu subskribieren und muss die Ausgabe immer eine Liste sein?
Re: Erzwingen, dass eine subskribierte Liste immer eine Liste ist?Hallo Martin,
Dies ist etwas, das wir für JMP 13 "korrigieren". Ich füge "Korrekturen" in Anführungszeichen ein, weil es möglich ist, dass einige ältere Skripts vom alten Verhalten abhängen und die Korrektur als einen Bruch betrachten. Wenn dies ein großes Problem darstellt, müssen wir möglicherweise eine Alternative finden.
ich Es ist gut, Ihre Nachricht zu sehen, die die Idee einer Korrektur unterstützt.
Re: Erzwingen, dass eine subskribierte Liste immer eine Liste ist?Hier ist eine bessere, die auf Listenlisten arbeitet.
a = {{"A"}, {"B"}, {"C"}, {"D"}, {123}};
sub1 = Liste (1,3,5);
2 = Liste (1);
ForceList = Funktion ({forceme},
If (Ist Liste (Forceme), Forceme, EvalList (List (Forceme)))
);
SubscriptList = Funktion ({inlist, subscriptlist},
if (N Elemente (Indexliste) == 1,
EvalList (Liste (inlist [subscriptlist]))
.
inlist [subscriptlist]
)
);
Ausgabe:
show (ForceList (a [sub1])));
show (ForceList (a [₂]));
{{"A"}, {"C"}, {123}};
{"EIN"};
show (SubscriptList (a, sub1));
show (SubscriptList (a ,₂));
{{"A"}, {"C"}, {123}};
{{"EIN"}};
Re: Erzwingen, dass eine subskribierte Liste immer eine Liste ist?Ja, das habe ich mir gedacht. Ich habe eine einfache "Hilfsfunktion" geschrieben, die ich für subskribierte Listen verwenden kann. Vielen Dank!
ForceList = Funktion ({forceme},
If (Ist Liste (Forceme), Forceme, EvalList (List (Forceme)))
);
show (ForceList (a [sub1])));
show (ForceList (a [₂]));
Ausgabe:
{"A", "C", 123};
{"EIN"};
Re: Erzwingen, dass eine subskribierte Liste immer eine Liste ist?Wenn Ihr Index nur einen Wert hat, wird immer der Einzelwert zurückgegeben. Wenn Ihr Index eine Liste mit mehreren Werten ist, werden alle Werte in Form einer Liste zurückgegeben.
Um dies zu umgehen, benötigen Sie eine If-Anweisung, um zu überprüfen, wie viele Werte in Ihrer Indexliste enthalten sind.
Hier ein Beispiel, das ich zusammengestellt habe:
ein = { "EIN" . "B" . "C" . "D" . 123 } ;
sub1 = Liste ( 1 . 3 . 5 ) ;
2 = Liste ( 1 ) ;
Eval ( Eval Expr ( indicesList = { Ausdruck ( sub1 ) . Ausdruck ( 2 )} ) ) ;
Zum ( ich = 1 . ich <= N Artikel ( indicesList ) . ich ++
Ob ( N Artikel ( indicesList [ ich ] ) > 1 .
Temp = ein [ indicesList [ ich ]] .
Temp = Eval ( Eval Expr ( Liste ( Ausdruck ( ein [ indicesList [ ich ]] ) ) ) )
) ;
Show ( Temp ) ;
) ;