生成随机字符串我写这段代码来生成一个随机字符串。我想知道是否有更好或替代的方法可以在没有 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;回复:生成随机字符串我想不出没有循环该怎么做。 Random Integer 不返回随机向量。 随机索引返回一个向量,但没有重复项。
我只能想到更有效率。 在循环中连接字符串效率不高。 下面应该稍微改进一下。
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], "");
我也想知道是否存在无循环解决方案 
回复:生成随机字符串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 );
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 );
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 ) );
必须使用替换命令来消除字符之间的空格。
回复:生成随机字符串@萨姆加德纳“concat items”有第二个参数,您可以直接使用它并避免使用替代品以提高效率。
回复:生成随机字符串谢谢!就是这样,更简单的方法:
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 ) );回复:生成随机字符串我知道目标是避免循环,但是包含所有字母的一长串代码让我很烦。 下面是使用 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, "");
回复:生成随机字符串@萨姆加德纳@马克贝利这确实是一个重要的课题。 生成随机数向量在统计计算中很重要。
我在 JMP18 OSI 中进行了更改,因此现有的单行示例如下所示

现在变成这样:

回复:生成随机字符串我认为 J() 函数被低估了。 它按行顺序计算每个元素的第三个参数。 无需在 JSL 中显式循环,就可以用它做很多事情。 感谢您使用更广泛的示例改进脚本指南。
回复:生成随机字符串大家好,
要快速添加两件事。
1)如果你不喜欢大长列表分配(我也不喜欢),你可以这样做来获得你的字符集:
charset = words("ABCDEFGHIJKLMNOPQRSTUVWXYZ", "");
我一直这样做,完全是出于懒惰。 如果您需要多个字符的字符串,只需使用分隔符

2)从技术上讲,J 实际上确实循环……很快。 它返回一个矩阵,但可以在循环内做任何你喜欢的事情。 下面,每次循环都会打印 Nixonian denial,并返回斐波那契数矩阵。 请注意,索引 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( 10, 3...) 代替了我之前给出的示例中的 J ( 10, 1, ... ) (注意:我没有显示整个日志......前 20 行打印没有显示。 也请忽略“21th”、“22th”等文学滥用。)

回复:生成随机字符串感谢您允许我使用您的示例, @brady_brady ! 现在将在产品中与用户共享。 我已经更新了描述和示例。 您的阅读将是一个有趣且有趣的示例:)
