生成隨機字符串我編寫這段代碼是為了生成一個隨機字符串。我想知道是否有更好或替代的方法可以在沒有 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;回复:生成隨機字符串感謝您允許我使用您的示例, @brady_brady ! 現在,這將在產品中與用戶共享。 我已經更新了描述和示例。 您的示例將是一個有趣且有趣的示例:)

回复:生成隨機字符串是的,為了說明這一點,這裡是結果 J( 10, 3...在我之前給出的示例中,使用 ) 代替 J ( 10, 1, ... ) (注意:我沒有顯示整個日誌......打印的前 20 行沒有顯示。 另請忽略“21日”、“22日”等文學濫用行為。)

回复:生成隨機字符串大家好,
需要快速添加兩件事。
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++)
);

回复:生成隨機字符串我認為 J() 函數沒有得到充分重視。 它按行順序計算每個元素的第三個參數。 無需在 JSL 中顯式循環,就可以用它做很多事情。 感謝您通過更廣泛的示例改進了腳本指南。
回复:生成隨機字符串@薩姆加德納@馬克貝利這確實是一個重要的主題。 生成隨機數向量在統計計算中很重要。
我在 JMP18 OSI 中進行了更改,因此現有的單行示例如下所示

現在變成這樣:

回复:生成隨機字符串我知道目標是避免循環,但是包含所有字母的長行代碼困擾著我。 這是使用 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, "");
回复:生成隨機字符串謝謝!這是更簡單的方法:
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 ) );回复:生成隨機字符串@薩姆加德納“concat items”有第二個參數,您可以直接使用它並避免替代以提高效率。
回复:生成隨機字符串基於@馬克貝利和@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 ) );
必須使用替換命令來消除字符之間的空格。
回复:生成隨機字符串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 ) );回复:生成隨機字符串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], "");
哎喲! 魔法! 
回复:生成隨機字符串我想不出如何在沒有循環的情況下做到這一點。 隨機整數不返回隨機向量。 隨機索引返回一個向量,但不重複。
我只能想到提高效率。 在循環中連接字符串效率不高。 以下應該會有所改善。
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], "");
我也想知道是否存在無循環解決方案:)