ランダムな文字列を生成ランダムな文字列を生成するためにこのコードを書きました。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;Re: ランダムな文字列を生成するループなしでそれを行う方法は考えられません。 Random Integer はランダムなベクトルを返しません。 Random Index はベクトルを返しますが、重複は返しません。
より効率的であることしか考えられません。 ループ内で文字列を連結するのは効率的ではありません。 以下は少し改善されるはずです。
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], "");
私もノーループソリューションの存在について疑問に思っています:)
Re: ランダムな文字列を生成する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, Random Integer(26));
randstr=concat items(letters[idx], "");
フーヤー! 魔法! 
Re: ランダムな文字列を生成する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( letters[J( length, 1, Random Integer( 1, length ) ) ] );
);
Show( randomString( 10 ) );Re: ランダムな文字列を生成するに基づく@マークベイリーと@peng_liu貢献、これはうまくいくようです
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 ) );
文字間のスペースを取り除くために、代替コマンドを使用する必要がありました。
Re: ランダムな文字列を生成する@サムガードナー"concat items" には 2 番目の引数があり、これを直接使用して代替を回避し、より効率的にすることができます。
Re: ランダムな文字列を生成するありがとう!これが、はるかに簡単なアプローチです。
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 ) );Re: ランダムな文字列を生成するループを回避することが目的であることはわかっていましたが、すべての文字を含む長いコード行に悩まされていました。 ASCII テーブルを使用してランダムな文字を生成する方法を次に示します。 J() コマンドでは数値が必要なため、これは機能しませんでした。 おそらく、誰かがループを使用せずにこれを機能させることができます。
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, "");
Re: ランダムな文字列を生成する@サムガードナー@マークベイリーこれは本当に重要なテーマです。 乱数のベクトルを生成することは、統計計算において重要です。
JMP18 OSIに変更を加えたので、既存の1行の例は次のようになります

次のようになります。

Re: ランダムな文字列を生成するJ() 関数は過小評価されていると思います。 行ごとに各要素の 3 番目の引数を評価します。 JSLで明示的にループしなくてもできることはたくさんあります。 より広範な例を使用してスクリプト ガイドを改善していただきありがとうございます。
Re: ランダムな文字列を生成する皆さんこんにちは、
追加する2つの簡単なこと。
1)大きな長いリストの割り当てが気に入らない場合(私も好きではありません)、これを実行して文字セットを取得できます。
charset = words("ABCDEFGHIJKLMNOPQRSTUVWXYZ", "");
私はまったくの怠惰から、これをいつもやっています。 複数文字の文字列が必要な場合は、区切り記号を使用してください

2) 技術的には、J は実際にループします... すばやく。 行列を返しますが、ループ内で好きなことを行うことができます。 以下では、ニクソニアンの否定がループを通過するたびに出力され、フィボナッチ数の行列が返されます。 インデックス i はループの外側で初期化され、ループの中でインクリメントされることに注意してください。
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++)
);

Re: ランダムな文字列を生成するはい、それを説明するために、結果 J( 10, 3...) は、前に示した例の J ( 10, 1, ... ) の代わりに使用されています (注: ログ全体は表示していません...最初の 20 行の印刷は表示されていません。 また、「21th」、「22th」などの文言の乱用は無視してください。)

Re: ランダムな文字列を生成するあなたの例を使用することを許可してくれてありがとう、 @ブレイディ_ブレイディ! これで、製品内でユーザーと共有されます。 説明と例を更新しました。 あなたのものは、読むのに興味をそそる遊び心のある例になるでしょう:)
