gpt4 book ai didi

c# - 生成没有忽略值的随机字节数组

转载 作者:行者123 更新时间:2023-11-30 15:27:39 36 4
gpt4 key购买 nike

这是我用来生成随机字节数组的代码。完全可以,唯一的问题是有一个数字(或数字)我不想要。我的问题是,如何确保结果中不包含这些不需要的数字,而不必检查每个结果?

    Random rnd = new Random();
Byte[] bytes = new Byte[50];
rnd.NextBytes(bytes);

对于一个字节,我使用这个函数;

    int b = rnd.Next(min, (max + 1))
return (byte) b;

我可以控制结果范围,但重复调用此函数不会给出好的结果。

最佳答案

您的问题可以使用蒙特卡罗算法轻松解决。这就是@SteveLillis 正在讨论的内容,但这是一个不完整的答案。所以这是完整的。

void Main()
{
var exclusions = new HashSet<byte> { 1, 200, 58, 11, 66, 9 };

var results = RandomBytes()
.Where(b => exclusions.Contains(b) == false)
.Take(50)
.ToArray();
}

public IEnumerable<byte> RandomBytes()
{
var random = new Random();
byte[] buffer = new byte[32];
while(true)
{
random.NextBytes(buffer);
foreach(var ret in buffer)
{
yield return ret;
}
}
}

RandomBytes() 是一个随机字节流,很简单吧?

然后我们使用 Where(b => exclusions.Contains(b) == false) 从流中排除任何我们不喜欢的东西。 hashset是为了“效率”,但对byte没有帮助(只是习惯性放上去而已)。

Take(50),我们只需要流中的 50。

ToArray 将结果作为数组给我。

关于c# - 生成没有忽略值的随机字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27090811/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com