C# 从c中的给定数生成随机数#
用户在10文本框中输入数字,我将它们发送到一个数组中。现在我想从这个数组中生成随机数。我能做什么?使用数组中的值创建标准类?如果需要随机数依赖于所有数组项,则只需对它们进行异或运算C# 从c中的给定数生成随机数#,c#,arrays,random,C#,Arrays,Random,用户在10文本框中输入数字,我将它们发送到一个数组中。现在我想从这个数组中生成随机数。我能做什么?使用数组中的值创建标准类?如果需要随机数依赖于所有数组项,则只需对它们进行异或运算 public static Random BuildSeededRandom(int[] data) { if ( data == null || data.Length < 1 ) return new Random(); int xor = 0; foreach (
public static Random BuildSeededRandom(int[] data)
{
if ( data == null || data.Length < 1 )
return new Random();
int xor = 0;
foreach ( var i in data )
xor ^= i;
return new Random(xor);
}
publicstaticrandom-buildseedrandom(int[]数据)
{
if(data==null | | data.Length<1)
返回新的Random();
int-xor=0;
foreach(数据中的var i)
xor^=i;
返回新的随机数(xor);
}
使用数组中的值的标准类?如果需要随机数依赖于所有数组项,则只需对它们进行异或运算
public static Random BuildSeededRandom(int[] data)
{
if ( data == null || data.Length < 1 )
return new Random();
int xor = 0;
foreach ( var i in data )
xor ^= i;
return new Random(xor);
}
publicstaticrandom-buildseedrandom(int[]数据)
{
if(data==null | | data.Length<1)
返回新的Random();
int-xor=0;
foreach(数据中的var i)
xor^=i;
返回新的随机数(xor);
}
类似这样的内容:
public class Randomizer<T>
{
private readonly Random _random = new Random();
private readonly IList<T> _numbers;
public Randomizer(IList<T> numbers)
{
_numbers = numbers;
}
public T Next()
{
int idx = _random.Next(0, _numbers.Count);
return _numbers[idx];
}
}
请注意,代码不是线程安全的,因此如果可以从多个线程同时调用下一个
方法,则应实现一些锁定。类似以下内容:
public class Randomizer<T>
{
private readonly Random _random = new Random();
private readonly IList<T> _numbers;
public Randomizer(IList<T> numbers)
{
_numbers = numbers;
}
public T Next()
{
int idx = _random.Next(0, _numbers.Count);
return _numbers[idx];
}
}
请注意,代码不是线程安全的,因此,如果可能从多个线程同时调用
下一个
方法,则应实现一些锁定。是否要从随机数中选取随机数;或者将数组用作随机数生成器的“种子”?然后查看我的答案(如果它解决了您的问题,请接受它)。等等。。。所以你想洗牌数组,而不是给PRNG种子?你想从aray中挑选随机数;或者将数组用作随机数生成器的“种子”?然后查看我的答案(如果它解决了您的问题,请接受它)。等等。。。所以你想洗牌数组,而不是给PRNG种子?好的,它可以工作,但我想踢随机发生器从数组中生成的数字,以避免重复。@ActuallyMAB:那么你说的是洗牌数组()。你能澄清一下当所有数组数都耗尽时会发生什么吗?它是否应该改组和重新启动?或者抛出异常?实际上我不想重复数字。例如,结果不能是这样的:5-9-5-12。好的,它可以工作,但我想踢随机数发生器从数组中生成的数字,以避免重复。@ActuallyMAB:那么你说的是洗牌数组()。你能澄清一下当所有数组数都耗尽时会发生什么吗?它是否应该改组和重新启动?或者抛出异常?实际上我不想重复数字。例如,结果不能是这样的:5-9-5-12。
public class Randomizer<T>
{
private readonly Shuffler _shuffler = new Shuffler();
private readonly IList<T> _numbers;
public Randomizer(IList<T> numbers)
{
_numbers = new List<T>(numbers);
_shuffler.Shuffle(_numbers);
}
volatile int idx = 0;
public T Next()
{
if (idx >= _numbers.Count)
{
_shuffler.Shuffle(_numbers);
idx = 0;
}
return _numbers[idx++];
}
}