随机数字字符串,不包括特定数字

Geo*_*Ego 1 .net c# random

我正在使用C#中的.NET应用程序生成一个可变长度的随机数字字符串.我想添加一个清单,允许用户选择0到9之间的任何数字组合,并防止它们出现在字符串中.目前,我只是这样做以获取字符串:

do
{
   int num = rnd.Next(10);
   output += num.ToString();
   i++;
}
while (i < stringLength);
Run Code Online (Sandbox Code Playgroud)

我可以想出一种方法来排除选定的数字,一旦生成它们就把它们抛出而不是递增计数器,但似乎会有一个不那么浪费的算法.该程序将支持生成许多字符串,因此如果用户创建了数百万字符串,我希望将开销保持在最低限度.

额外奖励:我忘了提及我也想,如果有人能指出我这样的模式的资源.在不久的将来,我会根据参数随机编号,我会学习一些原则,而不是询问有关个别问题的问题.

Chr*_*isF 15

如果您生成一个允许的字符数组,那么从中选择:

int[] allowedDigits = {1, 2, 3, 6, 7, 0};
var output = new StringBuilder();

do
{
   int num = rnd.Next(allowedDigits.Length);
   output.Append(allowedDigits[num]);
   i++;
}
while (i < stringLength);
Run Code Online (Sandbox Code Playgroud)

显然allowedDigits是生成而不是硬编码;)

使用a StringBuilder更有效率,您不必明确地执行ToString.