Genera stringhe casualiHo scritto questo codice per generare una stringa casuale.Mi chiedevo se ci fossero modi migliori o alternativi per farlo senza un ciclo for.
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;Ri: Genera stringhe casualiGrazie per avermi permesso di usare il tuo esempio, @brady_brady ! Ora che sarà condiviso con gli utenti, nel prodotto. Ho aggiornato la descrizione e gli esempi. Il tuo sarà un esempio intrigante e giocoso da leggere 

Ri: Genera stringhe casualiSì, e per dimostrarlo, ecco il risultato J( 10, 3...) viene utilizzato al posto di J ( 10, 1, ... ) nell'esempio che ho fornito in precedenza (nota: non ho mostrato l'intero registro... le prime 20 righe di stampa non vengono visualizzate. Si prega inoltre di ignorare gli abusi letterari come "21", "22", ecc.)

Ri: Genera stringhe casualiCiao a tutti,
Due cose veloci da aggiungere.
1) Se non ti piace l'assegnazione della lunga lista (neanche a me), puoi farlo per ottenere il tuo set di caratteri:
charset = words("ABCDEFGHIJKLMNOPQRSTUVWXYZ", "");
Lo faccio sempre, per pura pigrizia. Se hai bisogno di stringhe di più caratteri, usa semplicemente un delimitatore

2) Tecnicamente, J in effetti fa un loop... velocemente. Restituisce una matrice, ma può fare quello che vuoi all'interno del ciclo. Di seguito, viene stampato un diniego nixoniano ogni volta che si esegue il ciclo e viene restituita una matrice di numeri di Fibonacci. Si noti che i, l'indice, è inizializzato all'esterno e incrementato all'interno del ciclo.
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++)
);

Ri: Genera stringhe casualiPenso che la funzione J() sia sottovalutata. Valuta il suo terzo argomento per ogni elemento in ordine di riga. C'è così tanto che si può fare con esso senza eseguire esplicitamente il loop in JSL. Grazie per aver migliorato la Guida allo scripting con esempi più estesi.
Ri: Genera stringhe casuali@SamGardner @Mark_Bailey questo è davvero un argomento importante. La generazione di un vettore di numeri casuali è importante nel calcolo statistico.
Ho apportato modifiche in JMP18 OSI, quindi gli esempi esistenti a riga singola hanno questo aspetto

ora diventa qualcosa del genere:

Ri: Genera stringhe casualiSo che l'obiettivo era evitare il looping, ma la lunga riga di codice che conteneva tutte le lettere mi dava fastidio. Ecco un modo per utilizzare la tabella ascii per generare i caratteri casuali. Non ha funzionato con il comando J(), poiché prevede numeri. Forse qualcuno può farlo funzionare senza dover usare un loop.
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, "");
Ri: Genera stringhe casualiGrazie!Eccolo, approccio molto più semplice:
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 ) );Ri: Genera stringhe casuali@SamGardner "concat items" ha un secondo argomento, che puoi usare direttamente ed evitare un sostituto per essere più efficiente.
Ri: Genera stringhe casualibasato su @Mark_Bailey E @peng_liu contributi, questo sembra funzionare bene
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 ) );
ho dovuto usare il comando sostitutivo per eliminare gli spazi tra i caratteri.
Ri: Genera stringhe casualiNames 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 ) );Ri: Genera stringhe casualinames 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], "");
Evviva! Magia! 
Ri: Genera stringhe casualiNon riesco a pensare a come farlo senza un loop. Random Integer non restituisce un vettore casuale. Random Index restituisce un vettore, ma nessun duplicato.
Posso solo pensare di essere più efficiente. La concatenazione di stringhe in un ciclo non è efficiente. Quanto segue dovrebbe migliorare un po'.
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], "");
Mi chiedo anche l'esistenza di una soluzione no-loop 