Generieren Sie zufällige ZeichenfolgenIch habe diesen Code geschrieben, um eine zufällige Zeichenfolge zu generieren.Ich habe mich gefragt, ob es bessere oder alternative Möglichkeiten gibt, dies ohne for-Schleife zu tun.
names default to here(1);
letters={"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
randstrlength=100;
randstr="";
for(ii=1, ii<=randstrlength, ii++,
randstr=randstr || letters[Random Integer(26)];
);
randstr;Betreff: Zufällige Zeichenfolgen generierenVielen Dank, dass ich Ihr Beispiel verwenden durfte, @brady_brady ! Dies wird nun im Produkt mit den Benutzern geteilt. Ich habe die Beschreibung und Beispiele aktualisiert. Es wird ein spannendes und spielerisches Lesebeispiel für Sie sein 

Betreff: Zufällige Zeichenfolgen generierenJa, und um das zu veranschaulichen, hier das Ergebnis J( 10, 3...) wird anstelle von J ( 10, 1, ... ) in dem Beispiel verwendet, das ich zuvor angegeben habe (Hinweis: Ich habe nicht das gesamte Protokoll angezeigt ... die ersten 20 Druckzeilen werden nicht angezeigt. Bitte ignorieren Sie auch die literarischen Missbräuche wie „21.“, „22.“ usw.)

Betreff: Zufällige Zeichenfolgen generierenHallo allerseits,
Zwei schnelle Dinge zum Hinzufügen.
1) Wenn Ihnen die große lange Listenzuweisung nicht gefällt (ich auch nicht), können Sie dies tun, um Ihren Zeichensatz zu erhalten:
charset = words("ABCDEFGHIJKLMNOPQRSTUVWXYZ", "");
Ich mache das ständig, aus reiner Faulheit. Wenn Sie Zeichenfolgen mit mehreren Zeichen benötigen, verwenden Sie einfach ein Trennzeichen

2) Technisch gesehen führt J tatsächlich eine Schleife aus ... schnell. Es gibt eine Matrix zurück, kann aber innerhalb der Schleife alles tun, was Sie wollen. Unten wird bei jedem Schleifendurchlauf eine Nixonsche Ablehnung ausgegeben und eine Matrix aus Fibonacci-Zahlen zurückgegeben. Beachten Sie, dass i, der Index, außerhalb der Schleife initialisiert und innerhalb der Schleife erhöht wird.
i = 1;
J( 10, 1,
print(evalinsert("For the ^i^^if(i < 4, words(\!"st,nd,rd\!",\!",\!")[i], \!"th\!")^ time, I'm not a loop!"));
round(1/sqrt(5)*((1+sqrt(5))/2)^i++)
);

Betreff: Zufällige Zeichenfolgen generierenIch denke, dass die Funktion J() unterschätzt wird. Es wertet sein drittes Argument für jedes Element in zeilenweiser Reihenfolge aus. Es gibt so viel, was man damit machen kann, ohne JSL explizit einzuschleifen. Vielen Dank, dass Sie den Scripting Guide mit ausführlicheren Beispielen verbessert haben.
Betreff: Zufällige Zeichenfolgen generieren@SamGardner @Mark_Bailey das ist wirklich ein wichtiges Thema. Die Generierung eines Vektors aus Zufallszahlen ist in der statistischen Berechnung wichtig.
Ich habe Änderungen in JMP18 OSI vorgenommen, sodass die vorhandenen einzeiligen Beispiele so aussehen

wird jetzt etwa so:

Betreff: Zufällige Zeichenfolgen generierenIch weiß, dass das Ziel darin bestand, Schleifen zu vermeiden, aber die lange Codezeile, die alle Buchstaben enthielt, störte mich. Hier ist eine Möglichkeit, die ASCII-Tabelle zum Generieren der zufälligen Zeichen zu verwenden. Mit dem Befehl J() hat es nicht funktioniert, da dieser Zahlen erwartet. Vielleicht kann jemand damit arbeiten, ohne eine Schleife verwenden zu müssen.
randstrlength = 100;
lstchars = {};
for each ({i}, 1::randstrlength,
lstchars[i]= hex to char (right(Hex(64+Random integer (26), "integer"),2));
);
randstr = concat items (lstchars, "");
Betreff: Zufällige Zeichenfolgen generierenDanke!Hier ist der viel einfachere Ansatz:
Names Default To Here( 1 );
randomString = Function( { length }, { letters },
letters = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
Return( concat items(letters[J( length, 1, Random Integer( 1, length ) ) ], "") );
);
Show( randomString( 10 ) );Betreff: Zufällige Zeichenfolgen generieren@SamGardner „concat items“ hat ein zweites Argument, das Sie direkt verwenden und auf einen Ersatz verzichten können, um effizienter zu sein.
Betreff: Zufällige Zeichenfolgen generierenbezogen auf @Mark_Bailey Und @peng_liu Beiträge, das scheint gut zu funktionieren
Names Default To Here( 1 );
randomString = Function( { length }, { letters },
letters = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
Return( substitute(concat items(letters[J( length, 1, Random Integer( 1, length ) ) ]), " ", "") );
);
Show( randomString( 10 ) );
musste den Ersatzbefehl verwenden, um Leerzeichen zwischen den Zeichen zu entfernen.
Betreff: Zufällige Zeichenfolgen generierenNames Default To Here( 1 );
randomString = Function( { length }, { letters },
letters = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
Return( letters[J( length, 1, Random Integer( 1, length ) ) ] );
);
Show( randomString( 10 ) );Betreff: Zufällige Zeichenfolgen generierennames default to here(1);
letters={"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
randstrlength=100;
idx = J(1,randstrlength, Random Integer(26));
randstr=concat items(letters[idx], "");
Hurra! Magie! 

Betreff: Zufällige Zeichenfolgen generierenIch kann mir nicht vorstellen, wie ich es ohne Schleife machen soll. Random Integer gibt keinen Zufallsvektor zurück. Random Index gibt einen Vektor zurück, aber keine Duplikate.
Ich kann mir nur vorstellen, effizienter zu sein. Das Verketten von Zeichenfolgen in einer Schleife ist nicht effizient. Das Folgende sollte sich ein wenig verbessern.
names default to here(1);
letters={"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
randstrlength=100;
idx = J(1,randstrlength);
for(ii=1, ii<=randstrlength, ii++,
idx[ii] = Random Integer(26);
);
randstr=concat items(letters[idx], "");
Ich frage mich auch, ob es eine No-Loop-Lösung gibt 